Laravelのルーティングでは「Route::resource」で指定することがあります。
「Route::resource」を指定するとCRUDのルーティングを1つの定義で行うことが可能になります。
一つ一つルーティングの指定を書いてもいいのですが、場合によっては「Route::resource」で指定した方がソースコードもスッキリし、可読性が上がるかもしれません。
ただ、不要なメソッドもあると思うので、その場合は「only」と「except」を使用し、不要なルーティングを制限することができます。
今回は「Route::resource」を使用した時の「only」と「except」の使用方法についてメモします。
Route::resourceの使い方
Laravelのルーティングの指定は「routes」ディレクトリ内のファイルに記載します。
※下記が例として「routes/web.php」に書いてる場合。
【基本的な書き方】
1 | Route::resource( 'photos' , 'PhotoController' ); |
ルーティングの内容は下記のようになります。
+-----------+---------------------------+--------------------+------------+ | Method | URI | Name | Action | +-----------+---------------------------+--------------------+------------+ | GET | /photos | photos.index | index | | GET | /photos/create | photos.create | create | | POST | /photos | photos.store | store | | GET | /photos/{photo} | photos.show | show | | GET | /photos/{photo}/edit | photos.edit | edit | | PUT/PATCH | /photos/{photo} | photos.update | update | | DELETE | /photos/{photo} | photos.destroy | destroy | +-----------+---------------------------+--------------------+------------+
次のコマンドを実行すれば現在のルーティングを一覧で表示することができます。
ターミナルからコンテナ内で下記を実行。
php artisan route:list
使わないメソッドに関してはメソッドを消しているとエラーが起きてしまうので、ルーティングを制限しておく必要があります。
その際に「only」と「except」を使用します。
「only」で使用するメソッドを指定
「only」で指定した場合、記述したメソッドのみリクエストすることが可能になります。
【onlyを使用した場合の例】
1 | Route::resource( 'photos' , 'PhotoController' , [ 'only' => [ 'index' , 'show' ]]); |
上記の例では「index」と「show」のみ許可しています。
+-----------+---------------------------+--------------------+------------+ | Method | URI | Name | Action | +-----------+---------------------------+--------------------+------------+ | GET | /photos | photos.index | index | | GET | /photos/{photo} | photos.show | show | +-----------+---------------------------+--------------------+------------+
「except」で使用しないメソッドを指定
「except」で指定した場合、記述したメソッド以外のリクエストが可能になります。
なので、除外したいメソッドを記述します。
【exceptを使用した場合の例】
1 | Route::resource( 'photos' , 'PhotoController' , [ 'except' => [ 'edit' , 'create' ]]); |
上記の例では「edit」と「create」以外のリクエストを許可している形になります。
+-----------+---------------------------+--------------------+------------+ | Method | URI | Name | Action | +-----------+---------------------------+--------------------+------------+ | GET | /photos | photos.index | index | | POST | /photos | photos.store | store | | GET | /photos/{photo} | photos.show | show | | PUT/PATCH | /photos/{photo} | photos.update | update | | DELETE | /photos/{photo} | photos.destroy | destroy | +-----------+---------------------------+--------------------+------------+
今回はLaravelのルーティングで「Route::resource」を使用した時の「only」と「except」の使用方法について記載しました。
この辺りを理解しておくとルーティングの記述を綺麗にまとめることができると思います。