1. ホーム
  2. laravel

[解決済み] Laravel - Route::リソースとRoute::コントローラの比較

2022-05-04 07:17:23

質問

Laravelのウェブサイト、Stack Overflow、Googleのドキュメントを読みましたが、以下の違いがまだわかりません。 Route::resourceRoute::controller .

ある回答では、Route::resourceはくずのためのものだと言っていました。しかし、Route::controllerを使えば、Route::resourceと同じことを実現でき、必要なアクションだけを指定することができるのです。

兄弟のように見える。

Route::controller('post','PostController');
Route::resource('post','PostController');

何を使うか、どう選ぶか?良い方法とは何でしょうか?

どのように解決するの?

RESTful リソースコントローラ

A RESTful リソースコントローラ は、あなたのためにいくつかのデフォルトルートを設定し、名前まで付けます。

Route::resource('users', 'UsersController');

これらの名前付きルートを提供します。

Verb          Path                        Action  Route Name
GET           /users                      index   users.index
GET           /users/create               create  users.create
POST          /users                      store   users.store
GET           /users/{user}               show    users.show
GET           /users/{user}/edit          edit    users.edit
PUT|PATCH     /users/{user}               update  users.update
DELETE        /users/{user}               destroy users.destroy

そして、次のようなコントローラを設定します(アクション = メソッド)。

class UsersController extends BaseController {

    public function index() {}

    public function show($id) {}

    public function store() {}

}

また、このようにどのようなアクションを含めるか、含めないかを選択することができます。

Route::resource('users', 'UsersController', [
    'only' => ['index', 'show']
]);

Route::resource('monkeys', 'MonkeysController', [
    'except' => ['edit', 'create']
]);

API リソースコントローラ

Laravel 5.5では、リソースコントローラーのルートを扱うための別の方法が追加されました。 APIリソースコントローラ は上図のように動作しますが createedit のルートになります。これはRESTfulなAPIで使われるルートを簡単にマッピングするために使われるものです。 create また edit メソッドを使用します。

Route::apiResource('users', 'UsersController');

RESTful Resource Controllerのドキュメント



暗黙のコントローラ

について 暗黙のコントローラ はより柔軟です。HTTP リクエストの種類と名前に基づいて、コントローラのメソッドにルーティングされます。しかし、ルート名は定義されていないので、同じルートに対するすべてのサブフォルダをキャッチすることになります。

Route::controller('users', 'UserController');

は、一種のRESTfulな命名規則でコントローラを設定するように導くでしょう。

class UserController extends BaseController {

    public function getIndex()
    {
        // GET request to index
    }

    public function getShow($id)
    {
        // get request to 'users/show/{id}'
    }

    public function postStore()
    {
        // POST request to 'users/store'
    }

}

暗黙のコントローラに関する文書



必要なものを、好みに合わせて使うのが良いと思います。個人的には 暗黙のコントローラ というのも、この方法は煩雑で、名前を提供せず、また php artisan routes . 私は通常 RESTful Resource コントローラ を明示的なルートと組み合わせて使用します。