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

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

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

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

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

作成したファイルは、

BbsController.php

namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class BbsController extends Controller
{
}

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

BbsController.php

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

// トップページ
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');

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

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

次に続きます。