首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel - Route::resource vs Route::controller

Laravel - Route::resource vs Route::controller
EN

Stack Overflow用户
提问于 2014-05-07 06:54:51
回答 2查看 187K关注 0票数 156

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

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

他们看起来就像兄弟姐妹:

代码语言:javascript
复制
Route::controller('post','PostController');
Route::resource('post','PostController');

我们如何选择要使用的内容?什么是好的实践?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-07 08:23:29

RESTful资源控制器

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

代码语言:javascript
复制
Route::resource('users', 'UsersController');

为您提供以下命名路由:

代码语言:javascript
复制
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

你可以像这样设置你的控制器(动作=方法)

代码语言:javascript
复制
class UsersController extends BaseController {

    public function index() {}

    public function show($id) {}

    public function store() {}

}

您还可以选择包含或排除哪些操作,如下所示:

代码语言:javascript
复制
Route::resource('users', 'UsersController', [
    'only' => ['index', 'show']
]);

Route::resource('monkeys', 'MonkeysController', [
    'except' => ['edit', 'create']
]);

API资源控制器

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

代码语言:javascript
复制
Route::apiResource('users', 'UsersController');

RESTful Resource Controller documentation

隐式控制器

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

代码语言:javascript
复制
Route::controller('users', 'UserController');

将引导您使用一种RESTful命名方案设置控制器:

代码语言:javascript
复制
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

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

票数 323
EN

Stack Overflow用户

发布于 2014-12-19 00:59:32

对于路由控制器方法,我们只需定义一条路由。在get或post方法中,我们必须单独定义路由。

并且resources方法用于创建多个路由来处理各种Restful操作。

这里是关于这个的Laravel documentation

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23505875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档