[Laravel]リソースコントロラーを使う

カテゴリ: Laravel

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        |
+--------+-----------+-----------------------+---------------+---------------------------------------------+------------+
こちらもおススメ

コメントを残す

メールアドレスが公開されることはありません。