Laravel-路由::资源vs路由::控制器

Laravel-路由::资源vs路由::控制器,laravel,laravel-5,laravel-4,Laravel,Laravel 5,Laravel 4,我阅读了Laravel网站、Stack Overflow和Google上的文档,但仍然不理解Route::resource和Route::controller之间的区别 其中一个答案是Route::resource用于crud。但是,使用Route::controller,我们可以完成与Route::resource相同的任务,并且我们只能指定所需的操作 他们看起来像兄弟姐妹: Route::controller('post','PostController'); Route::resource

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

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

他们看起来像兄弟姐妹:

Route::controller('post','PostController');
Route::resource('post','PostController');
我们如何选择使用什么?什么是好的实践?

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
您可以这样设置控制器(操作=方法)

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

Route::resource('users', 'UsersController', [
    'only' => ['index', 'show']
]);

Route::resource('monkeys', 'MonkeysController', [
    'except' => ['edit', 'create']
]);
API资源控制器 Laravel5.5增加了另一种处理资源控制器路由的方法API资源控制器的操作与上面所示完全相同,但不注册
create
edit
路由。它旨在方便地映射RESTful API中使用的路由-通常在
create
edit
方法中没有任何类型的数据

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


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

}



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

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

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


这里是关于这一点的拉维。

如果我们使用多个资源路由(可能是索引,显示),为什么不使用静态路由Route::get(…)?我认为使用array('only'=>array('index','show')并不比使用array好,也不比使用array差。当我们请求类似于'user/123'的内容时,RESTFull控制器使用什么方法,getIndex()对'user/'有效,但对于user/123,我得到了错误NotFoundHttpException(尝试了不同的名称getView和其他名称,仅当声明为Controller@getView)?有人能澄清一下“resource.edit”的用途吗?它是一种GET方法,所以我认为它应该是关于资源的完整信息,而不是通过“resource.show”显示有限的信息?@Anthony-
resource.edit
是显示编辑视图,基本上是编辑现有资源的表单。@fungku这很有趣ng..你是说resource.edit实际上会返回HTML而不是JSON吗?@Anthony(据我所知)是的。
resource.edit
resource.create
通常用于UI…使用HTML表单呈现视图。这些表单将分别放置/发布到
resource.update
resource.store
。如果不这样做,则可以忽略它们并去掉edit()和create()方法。请注意Laravel 5.2用户,同时不推荐使用隐式控制器。
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'
    }

}