Laravelではリソースコントラーを使うことで、CRUD処理でよく使われるルーティングを簡単に登録することができる。
作業手順
artisanコマンドでコントローラを追加。リソースコントローラはartisan make:controller
にオプション--resource
をつけることでテンプレートを作成できる。
$ php artisan make:controller UserController --resource --model=Models/User --force --no-interaction
追加されたファイルを確認
$ git status
Untracked files:
app/Http/Controllers/UserController.php
app/Models/User.php
作成されたUserController.phpのメソッド一覧を確認。7つのコンとローが用意されたことがわかる。
$ more app/Http/Controllers/UserController.php | grep function
public function index()
public function create()
public function store(Request $request)
public function show($id)
public function edit($id)
public function update(Request $request, $id)
public function destroy($id)
このControllerをroutes/api.php
に追記する
Route::resource('users', 'UserController');
追加されたルートの一覧をartisan確認すると、Route::resource()だけで下記の7つのルートが一度に登録されることがわかる
$ php artisan route:list --name=users
+--------+-----------+-----------------------+---------------+---------------------------------------------+------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+-----------+-----------------------+---------------+---------------------------------------------+------------+
| | GET|HEAD | api/users | users.index | App\Http\Controllers\UserController@index | api |
| | POST | api/users | users.store | App\Http\Controllers\UserController@store | api |
| | GET|HEAD | api/users/create | users.create | App\Http\Controllers\UserController@create | api |
| | GET|HEAD | api/users/{user} | users.show | App\Http\Controllers\UserController@show | api |
| | PUT|PATCH | api/users/{user} | users.update | App\Http\Controllers\UserController@update | api |
| | DELETE | api/users/{user} | users.destroy | App\Http\Controllers\UserController@destroy | api |
| | GET|HEAD | api/users/{user}/edit | users.edit | App\Http\Controllers\UserController@edit | api |
+--------+-----------+-----------------------+---------------+---------------------------------------------+------------+
Route::resource()で全部登録して欲しくない場合は、以下のようにonlyを書くことで一部のactionだけを許容するよう変更できる
Route::resource('users', UserController::class, ['only' => ['index', 'show', 'update', 'destroy']]);
$ php artisan route:list --name=users
+--------+-----------+-----------------------+---------------+---------------------------------------------+------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+-----------+-----------------------+---------------+---------------------------------------------+------------+
| | GET|HEAD | api/users | users.index | App\Http\Controllers\UserController@index | api |
| | GET|HEAD | api/users/{user} | users.show | App\Http\Controllers\UserController@show | api |
| | PUT|PATCH | api/users/{user} | users.update | App\Http\Controllers\UserController@update | api |
| | DELETE | api/users/{user} | users.destroy | App\Http\Controllers\UserController@destroy | api |
+--------+-----------+-----------------------+---------------+---------------------------------------------+------------+
こちらもおススメ