はじめに
Laravel9までは触ったことがあるのですが、そこから時が止まっているので最新バージョンではどれくらい書き方が変わっているのかをまとめたものです。
ルーティングの書き方
基本的な書き方
コールバックに直接処理を書く場合
use Illuminate\Support\Facades\Route;
Route::get('/greeting', function () {
return 'Hello World';
});
コントローラーを指定する場合
use App\Http\Controllers\UserController;
Route::get('/user', [UserController::class, 'index']);
利用可能なHTTPメソッド
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
複数のHTTPメソッドに対応したい場合、一部を指定する場合はmatch
メソッド、全てを使用する場合はany
メソッドが使える。
// getとpostのみ対応
Route::match(['get', 'post'], '/', function () {
// ...
});
// 全てに対応
Route::any('/', function () {
// ...
});
リダイレクトルート
// /hereから/thereへリダイレクト
Route::redirect('/here', '/there');
上記の場合、ステータスコードは302になるので別のステータスコードを設定したい場合は以下のように書ける。
// /hereから/thereへ301リダイレクト
Route::redirect('/here', '/there', 301);
また、301の場合は以下のようにも書ける。
// /hereから/thereへ301リダイレクト
Route::permanentRedirect('/here', '/there');
Viewルート
// /welcomeに来たらwelcome.blade.phpを返す
Route::view('/welcome', 'welcome');
// welcome.blade.phpに変数を渡す場合
Route::view('/welcome', 'welcome', ['name' => 'Taylor']);
名前付きルート
Route::get(
'/user/profile',
[UserProfileController::class, 'show']
)->name('profile');
ルートグループ
ミドルウェア
Route::middleware(['first', 'second'])->group(function () {
Route::get('/', function () {
// Uses first & second middleware...
});
Route::get('/user/profile', function () {
// Uses first & second middleware...
});
});
コントローラー
use App\Http\Controllers\OrderController;
Route::controller(OrderController::class)->group(function () {
Route::get('/orders/{id}', 'show');
Route::post('/orders', 'store');
});
サブドメイン
Route::domain('{account}.example.com')->group(function () {
Route::get('/user/{id}', function (string $account, string $id) {
// ...
});
});
ルートプレフィックス
Route::prefix('admin')->group(function () {
Route::get('/users', function () {
// Matches The "/admin/users" URL
});
});
ルート名プレフィックス
Route::name('admin.')->group(function () {
Route::get('/users', function () {
// Route assigned name "admin.users"...
})->name('users');
});
まとめ
書き方という点ではそんなに変わっていないかなという印象でした。
参考