我阅读了Laravel网站、Stack Overflow和Google上的文档,但仍然不理解Route::resourceRoute::controller之间的区别.

其中一个答案是Route::resource用于crud.然而,使用Route::controller,我们可以完成与Route::resource相同的事情,并且只能指定所需的操作.

他们看起来像sibling 姐妹:

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

我们如何 Select 使用什么呢?什么是好的实践?

推荐答案

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的行为与上图完全相同,但不注册createedit条路由.它旨在方便地映射RESTful API中使用的路由,在RESTful API中,您通常没有位于createedit方法中的任何类型的数据.

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.

Laravel相关问答推荐

Laravel将变量从模板到已发布的供应商模板

验证判断请求的值是否存在于另一个表 Laravel 9 中

在 Laravel 中清除 Routes&config:cache 后未定义的常量

Laravel:BelongstoMany 关系实现

如何在自引用表上使用 Laravel 的 hasManyThrough

指令allow_call_time_pass_reference警告

Eager加载:在具有eloquent关系的枢轴上使用`with`

如何更改 Laravel5 中的视图文件夹?

SQLSTATE [HY000]:一般错误:1005 无法创建表 - Laravel 4

如何在没有 Eloquent 的情况下创建 Laravel 模型?

如何从 Laravel 中的 hasMany() 关系中获取所有结果?

设置 Laravel 5.4 以使用 React

在 Laravel 5.4 中将中间件应用于除 `setup/*` 之外的所有路由

Laravel 控制器构造

Laravel 同步错误

Laravel:自定义或扩展通知 - 数据库模型

Laravel 字符串验证以允许空字符串

Laravel 获取查询字符串

如何在 Laravel 中 Refresh刷新用户对象?

登录后 DevTools 无法解析 SourceMap 错误将重定向到该 js 文件