Laravel - Route :: resource vs Route :: controller

时间:2014-05-06 22:54:51

标签: laravel laravel-5 laravel-4

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

其中一个答案是说Route :: resource是为了讨厌。但是,使用Route :: controller,我们可以完成与Route :: resource相同的操作,我们只能指定所需的操作。

他们似乎像兄弟姐妹一样:

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

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

2 个答案:

答案 0 :(得分:227)

RESTful资源控制器

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

你可以设置你的控制器(actions = methods)

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']
]);

RESTful Resource Controller documentation


隐式控制器

隐式控制器更灵活。您将根据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 documentation


根据您的喜好,最好使用您需要的东西。我个人不喜欢隐式控制器,因为它们可能很乱,不提供名称,并且在使用php artisan routes时会让人感到困惑。我通常将 RESTful资源控制器与显式路由结合使用。

答案 1 :(得分:3)

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

资源方法用于创建多个路由来处理各种Restful操作。

这里是Laravel documentation