目的
CRUDのルーティングに関する整理
resourceメソッドの使い方
resourceメソッドを使うと、CRUDに必要なルーティングが定義されるので一行で済む。
このルートティングが、
Route::get ('/test', 'TestController@index');
Route::get ('/test/create', 'TestController@create');
Route::post ('/test', 'TestController@store');
Route::get ('/test/{test}', 'TestController@show');
Route::get ('/test/{test}/edit', 'TestController@edit');
Route::put ('/test/{test}', 'TestController@update');
Route::patch ('/test/{test}', 'TestController@update');
Route::delete('/test/{test}', 'TestController@destroy');
この一行で済む。
Route::resource('test', 'TestController');
HTTPメソッド | URI | アクション | 名前付きルート |
---|---|---|---|
GET | /test | index | test.index |
GET | /test/create | create | test.create |
POST | /test | store | test.store |
GET | /test/{test} | show | test.show |
GET | /test/{test}/edit | edit | test.edit |
PUT/PATCH | /test/{test} | update | test.update |
DELETE | /test/{test} | destroy | test.destroy |
一部だけルーティングしたい場合
except
Route::resource ('/test','TestController', ['except' => ['create','show']]);
も一部除外したいルーティングあれば、第三引数にexceptキーの値としてアクション名を含む配列を指定すればそのアクションのルーティンがは除外される。
only
Route::resource ('/test','TestController', ['only' => ['edit']]);
逆に一部だけルーティングしたい場合は、第三引数にonlyキーの値としてアクション名を含む配列を指定すればそのアクションのみのルーティンが作成される。
パラメータ名の変更
デフォルトでそのまま引数に渡す場合は$testとして渡すことになる。
ルーティング
Route::resource('test','TestController');
コントローラ
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
class TestController extends Controller
{
public function show($test)
{
echo $test;
return view('index');
}
}
パラメータ名を変更したい場合はparametersメソッドを使って変更できる。
ルーティング
Route::resource('test','TestController')->parameters(['test' => 'sample_id']);
コントローラ
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
class TestController extends Controller
{
public function show($sample_id)
{
echo $sample_id;
return view('index');
}
}
感想
当方Laravel6 のため少し書き方が古いのでこのように書いたが、新しめのバージョンでも大丈夫かと思う。一応公式サイトで確認してください。
参考URL
・Laravel6:コントローラ
・Laravel7:コントローラ
・Laravel8:コントローラ
・Laravel9:コントローラ
・Laravel10:コントローラ