RESTful Resource controller
RESTful resource controller为您设置了一些默认路由,甚至为它们命名.
Route::resource('users', 'UsersController');
Gives you these named routes:
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
您可以这样设置您的控制器(Actions=Methods)
class UsersController extends BaseController {
public function index() {}
public function show($id) {}
public function store() {}
}
您还可以 Select 包括或排除哪些操作,如下所示:
Route::resource('users', 'UsersController', [
'only' => ['index', 'show']
]);
Route::resource('monkeys', 'MonkeysController', [
'except' => ['edit', 'create']
]);
API资源控制器
Laravel 5.5增加了另一种处理资源控制器路由的方法.API Resource Controller的行为与上图完全相同,但不注册create
和edit
条路由.它旨在方便地映射RESTful API中使用的路由,在RESTful API中,您通常没有位于create
或edit
方法中的任何类型的数据.
Route::apiResource('users', 'UsersController');
RESTful Resource Controller documentation
Implicit controller
Implicit controller更灵活.您将根据HTTP请求类型和名称路由到控制器方法.但是,您没有为您定义路由名称,它将捕获同一路由的所有子文件夹.
Route::controller('users', 'UserController');
Would lead you to set up the controller with a sort of RESTful naming scheme:
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 documentation
It is good practice to use what you need, as per your preference. I personally don't like the Implicit controllers, because they can be messy, don't provide names and can be confusing when using php artisan routes
. I typically use RESTful Resource controllers in combination with explicit routes.