
LaravelでRoute::resourceを使わずにCRUD Routingを書く
Resource Controller をresource使わずに書く
先に結論です。下記を省略せずに書くとどうなるかという感じです。
Route::resource('post', 'PostController');
Laravel 5.3〜
// 一覧 Route::get('post', 'PostController@index')->name('post.index'); // 保存 Route::post('post', 'PostController@store')->name('post.store'); // 作成 Route::get('post/create', 'PostController@create')->name('post.create'); // 表示 Route::get('post/{post_id}', 'PostController@show')->name('post.show'); // 編集 Route::get('post/edit/{post_id}', 'PostController@edit')->name('post.edit'); // 更新 Route::put('post/{post_id}', 'PostController@update')->name('post.update'); // 削除 Route::delete('post/{post_id}', 'PostController@destroy')->name('post.destroy');
Laravel 〜5.2
// 一覧 Route::get('post', [ 'as' => 'post.index','uses' => 'PostController@index', ]); // 保存 Route::post('post', [ 'as' => 'post.store','uses' => 'PostController@store', ]); // 作成 Route::get('post/create', [ 'as' => 'post.create','uses' => 'PostController@create', ]); // 表示 Route::get('post/{post_id}', [ 'as' => 'post.show','uses' => 'PostController@show', ]); // 編集 Route::get('post/edit', [ 'as' => 'post.edit','uses' => 'PostController@edit', ]); // 更新 Route::put('post/{post_id}', [ 'as' => 'post.update','uses' => 'PostController@update', ]); // 削除 Route::delete('post/{post_id}', [ 'as' => 'post.destroy','uses' => 'PostController@destroy', ]);
(正確にはupdateがresourceの時のようにPUT|PATCHになっておらずこれだとPUTです。)
except, onlyについて
上記の分けて書くモチベーションとして、resourceのルーティング全部はいらないとか、それぞれでmiddlewareを細かく設定したいとかがあるかなと思います。
そういう時に次のような書き方も知っておくと便利です。
// 表示はいらないからそれ以外 Route::resource('post', 'PostController', ['except' => ['show']]);
// 作成、保存、一覧だけ Route::resource('post', 'PostController', ['only' => ['create', 'store', 'index']]);
典型的なCRUDのためのリソースコントローラについて
結論から入ったので後は基本的なことの補足です。
典型的なCRUDを作成する時に下記ようにするといい感じのControllerを生成してくれます。
php artisan make:controller PostController --resource
その後、ルーティングで下記のようにします。
Route::resource('post', 'PostController');
こんな感じのRoutingが出来上がります。
Method | URI | Name | Action | Middleware |
---|---|---|---|---|
GET|HEAD | post | post.index | App\Http\Controllers\PostController@index | web |
POST | post | post.store | App\Http\Controllers\PostController@store | web |
GET|HEAD | post/create | post.create | App\Http\Controllers\PostController@create | web |
GET|HEAD | post/edit | post.edit | App\Http\Controllers\PostController@edit | web |
GET|HEAD | post/{post_id} | post.show | App\Http\Controllers\PostController@show | web |
PUT | post/{post_id} | post.update | App\Http\Controllers\PostController@update | web |
DELETE | post/{post_id} | post.destroy | App\Http\Controllers\PostController@destroy | web |
これをばらして書いたものが最初に書いたものということでした。