Laravelのルーティング(resourceメソッド)


# 目的
　CRUDのルーティングに関する整理


# resourceメソッドの使い方
resourceメソッドを使うと、CRUDに必要なルーティングが定義されるので一行で済む。

このルートティングが、
```php
Route::get   ('/test',              'TestController@index');
Route::get   ('/test/create',       'TestController@create');
Route::post  ('/test',              'TestController@store');
Route::get   ('/test/{test}',       'TestController@show');
Route::get   ('/test/{test}/edit',  'TestController@edit');
Route::put   ('/test/{test}',       'TestController@update'); 
Route::patch ('/test/{test}',       'TestController@update'); 
Route::delete('/test/{test}',       'TestController@destroy');
```
　
この一行で済む。
```php
Route::resource('test', 'TestController');
```
　
| HTTPメソッド | URI                | アクション | 名前付きルート   |
|--------------|--------------------|------------|-----------------|
| GET          | /test              | index      | test.index      |
| GET          | /test/create       | create     | test.create     |
| POST         | /test              | store      | test.store      |
| GET          | /test/{test}       | show       | test.show       |
| GET          | /test/{test}/edit  | edit       | test.edit       |
| PUT/PATCH    | /test/{test}       | update     | test.update     |
| DELETE       | /test/{test}       | destroy    | test.destroy    |


# 一部だけルーティングしたい場合
## except
```php
Route::resource ('/test','TestController', ['except' => ['create','show']]);
```
も一部除外したいルーティングあれば、第三引数に**except**キーの値としてアクション名を含む配列を指定すればそのアクションのルーティンがは除外される。
## only
```php
Route::resource ('/test','TestController', ['only' => ['edit']]);
```
逆に一部だけルーティングしたい場合は、第三引数に**only**キーの値としてアクション名を含む配列を指定すればそのアクションのみのルーティンが作成される。

# パラメータ名の変更
デフォルトでそのまま引数に渡す場合は$testとして渡すことになる。
```php:ルーティング
Route::resource('test','TestController');
```
```php:コントローラ
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;

class TestController extends Controller
{
  public function show($test)
  {
    echo $test;
    return view('index');
  }
}
```
　
パラメータ名を変更したい場合はparametersメソッドを使って変更できる。
```php:ルーティング
Route::resource('test','TestController')->parameters(['test' => 'sample_id']);
```
```php:コントローラ
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;

class TestController extends Controller
{
  public function show($sample_id)
  {
    echo $sample_id;
    return view('index');
  }
}
```


# 感想
　当方Laravel6 のため少し書き方が古いのでこのように書いたが、新しめのバージョンでも大丈夫かと思う。一応公式サイトで確認してください。

　参考URL
　・[Laravel6:コントローラ](https://readouble.com/laravel/6.x/ja/controllers.html#:~:text=%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82-,%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9,-Laravel%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9%E3%83%AB%E3%83%BC%E3%83%88)
　・[Laravel7:コントローラ](https://readouble.com/laravel/7.x/ja/controllers.html#:~:text=%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82-,%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9,-Laravel%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9%E3%83%AB%E3%83%BC%E3%83%88)
　・[Laravel8:コントローラ](https://readouble.com/laravel/8.x/ja/controllers.html#:~:text=%E3%81%A7%E3%81%8D%E3%82%8B%E3%81%A7%E3%81%97%E3%82%87%E3%81%86%E3%80%82-,%E3%81%93%E3%81%AE%E3%82%88%E3%81%86%E3%81%AA%E3%82%B3%E3%83%A2%E3%83%B3%E3%83%BB%E3%82%B1%E3%83%BC%E3%82%B9%E3%81%AE%E3%81%9F%E3%82%81,-%E3%80%81Laravel%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0)
　・[Laravel9:コントローラ](https://readouble.com/laravel/9.x/ja/controllers.html#:~:text=%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9-,%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E5%86%85,-%E3%81%AE%E5%90%84Eloquent)
　・[Laravel10:コントローラ](https://readouble.com/laravel/10.x/ja/controllers.html#:~:text=%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9-,%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3,-%E5%86%85%E3%81%AE%E5%90%84)