Laravel - Route::resource 与 Route::controller

标签 laravel laravel-5 routes laravel-4

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

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

他们看起来就像 sibling :

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

我们如何选择要使用什么?什么是好的做法?

最佳答案

RESTful 资源 Controller

RESTful 资源 Controller 为您设置一些默认路由,甚至为它们命名。

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

你会像这样设置你的 Controller ( Action =方法)

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资源 Controller

Laravel 5.5 添加了另一种处理资源 Controller 路由的方法。 API 资源 Controller 的行为与上面所示完全相同,但不注册 createedit 路由。它旨在方便地映射 RESTful API 中使用的路由 - 通常在 createedit 方法中没有任何类型的数据。

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

RESTful Resource Controller documentation


隐式 Controller

隐式 Controller 更加灵活。您将根据 HTTP 请求类型和名称路由到 Controller 方法。但是,您没有为您定义路由名称,它将捕获同一路由的所有子文件夹。

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

将引导您使用某种 RESTful 命名方案来设置 Controller :

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


根据您的喜好使用您需要的内容是一个很好的做法。我个人不喜欢隐式 Controller ,因为它们可能很困惑,不提供名称,并且在使用php artisan 路由时可能会造成困惑。我通常将RESTful 资源 Controller 与显式路由结合使用。

关于Laravel - Route::resource 与 Route::controller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23505875/

相关文章:

javascript - Laravel 删除按钮不适用于 Ajax 调用

angular - 如何让孙子在 Angular 6 中使用祖 parent <router-outlet>

sql-server - Mac 上的 Laravel sql 服务器

laravel - 如果我在 laravel 上使用许多 "get",我该如何实现资源 Controller ?

routes - 在 Laravel 4 路由中接受编码的 URL

php - 尝试将验证从 Controller 转移到 Laravel 5.2.15 中的请求类

jquery - Bootstrap 日期选择器隐藏在模态中

php - Laravel 模型函数内的联合

laravel-5 - 如何在Laravel中删除表?

php - 在 Laravel 中添加额外的属性(类)后,从 "Form::text"自动填充 "Form::model"