Laravelのルーティングでは「Route::resource」で指定することがあります。
「Route::resource」を指定するとCRUDのルーティングを1つの定義で行うことが可能になります。
一つ一つルーティングの指定を書いてもいいのですが、場合によっては「Route::resource」で指定した方がソースコードもスッキリし、可読性が上がるかもしれません。
ただ、不要なメソッドもあると思うので、その場合は「only」と「except」を使用し、不要なルーティングを制限することができます。
今回は「Route::resource」を使用した時の「only」と「except」の使用方法についてメモします。
Route::resourceの使い方
Laravelのルーティングの指定は「routes」ディレクトリ内のファイルに記載します。
※下記が例として「routes/web.php」に書いてる場合。
【基本的な書き方】
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を使用した場合の例】
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を使用した場合の例】
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」の使用方法について記載しました。
この辺りを理解しておくとルーティングの記述を綺麗にまとめることができると思います。