LaravelでBBSのコントローラを作る

安藤(プログラマー)
演劇もやっていまする。

相変わらず一貫性はありませんが、今日はLaravelでコントローラの作成をおさらいしますー。
コントローラを作成するコマンドは、

1
$ php artisan controller:make コントローラ名

ですね。
コマンドを打つと、/app/Http/Controllersにファイルができているはずです!
今回僕は、Bbsという掲示板表示機能をとりまとめるコントローラを作ります。

作成したファイルは、

BbsController.php

1
2
3
4
5
6
7
8
namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class BbsController extends Controller
{
}

こんな具合の骨格だけのものが出来上がっていると思います。
これに欲しい機能を加えていきましょう。

BbsController.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
namespace App\Http\Controllers;

// 記事用とバイナリファイル用のモデルを呼び出し
use App\Posting;
use App\UploadFile;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class BbsController extends Controller
{
    // トップページ表示
    public function index(Request $request)
    {
        // 記事一覧を取得(ついでにペジネーションも)
        $post_list = Posting::query()->where('target_id',0)->orderBy('id','desc')->paginate(5);
        // ペジネーターURIを指定
        $post_list->setPath('/index');

        return view('index',compact(
            'post_list',
        ));
    }

    // 編集ページ
    public function editPage(Request $request)
    {
        // 対象記事のIDをリクエスト値から取得
        $id = $request->input('number');
        // 対象記事の取得
        $target_post = Posting::query()->where('id',$id)->first();

        return view('editPage',compact(
            'target_post',
        ));
    }

    // 削除ページ
    public function deletePage(Request $request)
    {
        $id = $request->input('number');
        $target_post = Posting::query()->where('id',$id)->first();

        return view('deletePage',compact(
            'target_post'
        ));
    }

    // 返信ページ
    public function replyPage(Request $request)
    {
        $id = $request->input('number');
        $target_post = Posting::query()->where('id',$id)->first();

        return view('replyPage',compact(
            'target_post',
        ));
    }

    // 結果ページ
    public function resultPage()
    {
        // 処理時にセッションに保存された成功メッセージを取得
        $success_msg = session()->pull('success_msg');

        return view('resultPage',compact(
            'success_msg'
        ));
    }

    // 返信一覧表示
    public function list(Request $request)
    {
        $id = $request->input('number');
        $target_post = Posting::query()->where('id',$id)->first();

        $post_list = Posting::query()->where('target_id',$id)->orderBy('id','desc')->paginate(5);
        $post_list->setPath('/list?number=');

        return view('list',compact(
            'target_post',
            'post_list',
        ));
    }

    // バイナリファイルの出力
    public function loadFile(Request $request)
    {
        $id = $request->input('number');
        $file = UploadFile::query()->where('id',$id)->first();

        // もし対象記事に関連するバイナリファイルがあれば
        if($file)
        {
            // 形式に従って出力
            header("Content-Type: ".$file->mime);
            echo $file->file;
        }
        else
        {
            return redirect()->back();
        }
    }
}

ばーっと書き加えてしまいました!
掲示板の表示関連でほしいメソッドは、すべてこのBbsControllerに持たせています。

ただ、コントローラに記載しただけでは機能しません。。
/routes/web.phpにルートを定義するのをお忘れなく!

web.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// トップページ
Route::get('/index','BbsController@index');

// 編集ページ
Route::get('/editPage','BbsController@editPage');
// 削除ページ
Route::get('/deletePage','BbsController@deletePage');
// 返信ページ
Route::get('/replyPage','BbsController@replyPage');
// 結果ページ
Route::get('/resultPage','BbsController@resultPage');

// 返信一覧ページ
Route::get('/list','BbsController@list');

// バイナリファイルの出力
Route::get('/file','BbsController@loadFile');

と、こんな具合。
これでルートに定義されたパスにアクセスすると、指定のコントローラとメソッドが呼び出されて処理が行われます。

そして、これに加えてもう一つ。
処理専門のコントローラを作成することで、ようやく掲示板として機能することができるようになります。
またコードを載せると長くなりそうなので、一旦ここで・・・。

次に続きます。