web-dev-qa-db-ja.com

Laravel-Route :: resource vs Route :: controller

Laravelウェブサイト、Stack Overflow、およびGoogleでドキュメントを読みましたが、それでもRoute::resourceRoute::controllerの違いを理解していません。

回答の1つは、Route :: resourceが粗悪品であると言いました。ただし、Route :: controllerを使用すると、Route :: resourceと同じことを実現でき、必要なアクションのみを指定できます。

彼らは兄弟のように見えます:

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

使用するものをどのように選択できますか?良い習慣とは何ですか?

112
Sonique

RESTfulリソースコントローラー

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']
]);

RESTfulリソースコントローラーのドキュメント


暗黙のコントローラー

Implicit 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'
    }

}

Implicit Controllerドキュメント


好みに応じて、必要なものを使用することをお勧めします。個人的にはImplicit controllerが好きではありません。なぜなら、それらは乱雑で、名前を提供せず、php artisan routesを使用するときに混乱を招く可能性があるためです。通常、RESTfulリソースコントローラーを明示的なルートと組み合わせて使用​​します。

231
ryanwinchester

ルートコントローラーメソッドの場合、1つのルートのみを定義する必要があります。 getまたはpostメソッドでは、ルートを個別に定義する必要があります。

また、リソースメソッドを使用して複数のルートを作成し、さまざまな安らかなアクションを処理します。

ここでLaravel ドキュメント についてこれについて。

3
Ahmad Sharif