【Laravel】ルーティング新機能まとめ
ヤマモトです。
Laravel9がリリースされてもう3ヶ月以上が経ちます!
自分がドキュメントなどを読み改めて勉強になったルーティング周りの新しい機能等について書いていきたいと思います。
ルーティングについて
まずルーティングとはURLとコントローラーのアクションの対応ルールのことです。対応ルールを作成することをルーティングを設定すると言ったりします。
ルーティング自体は、リクエストを判別してコントローラアクションに処理を振り分けることを言います。
参考記事:https://laravel.com/docs/9.x/routing
ルートグループがコントローラに対応
Laravel 9ではルートグループに対して設定できる項目が増えました!Laravel8までは以下のような記述方法がされていたかと思います。
use App\Http\Controllers\OrderController;
Route::get('/orders/{id}', [OrderController::class, 'show']);
Route::get('/orders', [OrderController::class, 'store']);
Laravel 9では以下のようにcontroller
メソッドを使用して、グループ内のすべてのルートに共通のコントローラを定義できます。
ルートを定義時に、そのルートが呼び出すコントローラメソッドを指定するだけでよくなったのですごくスッキリしますね!
※ 正確にはLaravel 8.80
で追加されていたようです。
use App\Http\Controllers\OrderController;
Route::controller(OrderController::class)->group(function () {
Route::get('/orders/{id}', 'show');
Route::post('/orders', 'store');
});
記事を書くまで知らなかったのでとても勉強になりました!
ルートパラメータ制約
またLaravelではルートインスタンスのwhereメソッドを使用してルートパラメータのフォーマットを制約することができます。
Route::get('/user/{name}', function ($name) {
//
})->where('name', '[A-Za-z]+');
しかしwhere
メソッドを使用せずルートにパターン制約をすばやく追加できるようにヘルパメソッドも用意されています。
例えばwhereNumber
メソッドは、1文字以上の数字であること を制約とします。
Route::get('/user/{id}', [SampleController::class, 'id'])
->whereNumber('id');
Laravel9.7では新たにwhereInが加わりました!
ルートパラメータを許可された値の配列であることを制約とします。
Route::get('/foo/{bar}')->whereIn('bar', ['dep', 'laz', 'SugarZ3ro']);
このようにより複雑なルート定義も可能になっています。
参考記事
https://laravel-news.com/laravel-9-7-0
最後に
今回はLaravelのルーティングに関して勉強になった機能などをご紹介しました。
少しでも皆さんの学びになったでしょうか。
以上となります。ありがとうございました。