UnsplashのAleksandr Ereminが撮影した写真
目次
Laravelのルーティングに関して、あれこれまとめたページです。
Route::get('/', function () {
return view('welcome');
});
もっともシンプルなルーティング
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\UsersController; // コントローラ読み込み
Route::get('/', [UsersController::class, 'index']);
// Route::get('パス', [コントローラ名::class, 'アクション名']);
下の表中「※ルーティング※」列に記載の7つのルーティングを次の1行記述するだけで定義できます。
Route::resource('posts', PostsController::class);
メソッド | URI | アクション名 | ルート名 | ※ルーティング※ |
GET | /posts | index | posts.index | Route::get(‘posts’, [PostController::class, ‘index’]); |
GET | /posts/{id} | show | posts.show | Route::get(‘posts/{id}’, [PostController::class, ‘show’]); |
GET | /posts/create | create | posts.create | Route::get(‘posts/create’, [PostController::class ‘create’]); |
POST | /posts | store | posts.store | Route::post(‘posts’, [PostController::class, ‘store’]); |
GET | /posts/{id}/edit | edit | posts.edit | Route::get(‘posts/{id}/edit’, [PostController::class, ‘edit’]); |
PUT /PATCH | /posts/{id} | update | posts.update | Route::put(‘posts/{id}’, [PostController::class, ‘update’]); Route::patch(‘posts/{id}’, [PostController::class, ‘update’]); |
DELETE | /posts/{id} | destroy | posts.destroy | Route::delete(‘posts/{id}’, [PostController::class, ‘destroy’]); |
参考ページ:https://readouble.com/laravel/11.x/ja/controllers.html#actions-handled-by-resource-controller
■補足⓵:7つ全部ではなく一部のみ定義したい場合にも使えます。
内容 | ルーティング |
基本ルーティング7つを1行で定義 | Route::resource(‘posts’, PostsController::class); |
基本7つの内の一部を定義 (例ではindex, showのみを定義) | Route::resource(‘posts’, PostsController::class)->only([ ‘index’, ‘show’ ]); |
基本7つの内の一部を除外して定義 (例ではcreate, store, update, destroy以外を定義) | Route::resource(‘posts’, PostsController::class)->except([ ‘create’, ‘store’, ‘update’, ‘destroy’ ]); |
■補足⓶:コントローラの生成コマンド
以下のように–resourceをつけると、7つのアクションが定義されたコントローラが生成されるので便利です。
php artisan make:controller PostsController --resource
認証機能などのライブラリを導入すると、自分の把握していないルーティングがされていることもあります。
そんな時に定義済みのルート一覧を確認するコマンドが以下です。
php artisan route:list
■1行のみの場合
以下のように「->middleware(‘auth’)」を付けるだけです。
Route::get('/users', [ UserController::class, 'index' ])->name('users.index')->middleware('auth');
■複数行の場合
Route::middleware('auth')->group(function(){
~~ここに任意のルートを記述する~~
Route::get( '/users', [UserController::class, 'index']); // ⇐例
})
Route::fallback(function(){
return redirect('/') // リダイレクトする場合
// abort(404); // 404エラーを返す場合
}
パスを省略する書き方です。
// ルーティング①
Route::prefix('users/{id}')->group(function () {
Route::post('follow', [UserFollowController::class, 'store'])->name('user.follow');
});
// ルーティング②
Route::post('/users/{id}/follow', [UserFollowController::class, 'store'])->name('user.follow');
ルーティングについては以上です。