結論
ルートグループコントローラーを指定する
Route::controller(PlacementController::class)
->prefix('placements')
->as('placements.')
->group(function () {
Route::get('', 'index')->name('index');
Route::get('/bills', 'bills')->name('bills');
Route::get('/bills/{bill}/invoice/pdf', 'invoice')->name('pdf.invoice');
});
このように記載することでroutingをスッキリまとめて記述することができました。
私はたいていルートグループコントローラーの上にmiddleware
メソッドを利用して以下のように記述しています。
Route::middleware(['auth'])->group(function () {
Route::controller( UserController::class)
->prefix('user')
->as('user.')
->group(function(){
Route::get('', 'index')->name('index');
Route::post('/search', 'search')->name('search');
});
Route::controller(PlacementController::class)
->prefix('placements')
->as('placements.')
->group(function () {
Route::get('', 'index')->name('index');
Route::get('/bills', 'bills')->name('bills');
Route::get('/bills/{bill}/invoice/pdf', 'invoice')->name('pdf.invoice');
});
});
routingの結果も載せておきます。
$php artisan route:list --compact
+----------+-------------------------------------+------------------------------------------------------------------+
| Method | URI | Action |
+----------+-------------------------------------+------------------------------------------------------------------+
| GET|HEAD | placements | App\Http\Controllers\PlacementController@index |
| GET|HEAD | placements/bills | App\Http\Controllers\PlacementController@bills |
| GET|HEAD | placements/bills/{bill}/invoice/pdf | App\Http\Controllers\PlacementController@invoice |
| GET|HEAD | user | App\Http\Controllers\UserController@index |
| POST | user/search | App\Http\Controllers\UserController@search |
+----------+-------------------------------------+------------------------------------------------------------------+
背景
最初はRoute Groupという以下のような記述で配列で渡す方法で記述していましたが、公式ドキュメントを確認したところ5.3
からあった方法だったので、新しいバージョンではどうなのかを調べていたところ見つけました。
Route::group(['prefix' => 'main', 'as' => 'main.'], function () {
Route::get('list','MainController@list')->name('list');
Route::get('edit','MainController@edit')->name('edit');
Route::get('search','MainController@search')->name('search');
});
おわり
Laravel8.80から使える、おすすめのrouting記法について書いてみました。
resoucesを使う場合は必要ないかもしれませんが、私はresoucesより明示的に書きたい派なので重宝しています。
もしご指摘等ありましたらコメントいただけると助かります。
参考