Laravelウェブサイト、Stack Overflow、およびGoogleでドキュメントを読みましたが、それでもRoute::resource
とRoute::controller
の違いを理解していません。
回答の1つは、Route :: resourceが粗悪品であると言いました。ただし、Route :: controllerを使用すると、Route :: resourceと同じことを実現でき、必要なアクションのみを指定できます。
彼らは兄弟のように見えます:
Route::controller('post','PostController');
Route::resource('post','PostController');
使用するものをどのように選択できますか?良い習慣とは何ですか?
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']
]);
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が好きではありません。なぜなら、それらは乱雑で、名前を提供せず、php artisan routes
を使用するときに混乱を招く可能性があるためです。通常、RESTfulリソースコントローラーを明示的なルートと組み合わせて使用します。
ルートコントローラーメソッドの場合、1つのルートのみを定義する必要があります。 getまたはpostメソッドでは、ルートを個別に定義する必要があります。
また、リソースメソッドを使用して複数のルートを作成し、さまざまな安らかなアクションを処理します。
ここでLaravel ドキュメント についてこれについて。