LoginSignup
0
2

More than 1 year has passed since last update.

【Laravel】Routingのスッキリした書き方

Last updated at Posted at 2022-06-23

結論

ルートグループコントローラーを指定する

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より明示的に書きたい派なので重宝しています。

もしご指摘等ありましたらコメントいただけると助かります。

参考

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2