当前位置: 首页 > 知识库问答 >
问题:

Laravel 4-路由::资源vs路由::控制器。用哪一个?

卫志泽
2023-03-14

我知道资源控制器可以有以下方法

index
show
create
edit
store
update
destroy

现在假设除了资源操作之外,我还需要执行以下操作:

  • 用户尝试登录
  • 管理员希望通过电子邮件/名字查找用户
  • 用户通过slug请求帖子

资源控制器对上述功能无用吗?如果编程一个API,我显然想要索引,显示,编辑,创建,销毁...

是否可以路由到这两种类型的控制器?例如。

Route::group(['prefix' => 'api'], function() {
    Route::group(['prefix' => 'v1'], function() {
        // Resource Controller
        Route::resource('posts', 'Api\V1\PostsResourceController');

        // Restful Controller
        Route::controller('posts', 'Api\V1\PostsController');
    });
});

或者我应该忘记资源控制器而改用restful控制器吗?

共有2个答案

都浩淼
2023-03-14

与资源控制器相关的一个问题是,当您使用命名路由时,加上组前缀,所有这些都会变得一团糟。如果要对前缀进行小的更改,则必须在整个视图和控制器中进行更改。你不能充分利用命名路线。

我在开发laravel应用程序时遵循这个模式。

Route::group( [ 'prefix' => 'admin' ], function(){
        Route::resource('pages', 'PageController', [
            'names' => [
                'show' => 'page',
                'edit' => 'page.edit'
            ],
            'only' => [
                'show',
                'edit'
            ]

        ]);

    });

所以我有以下优点。

  • 只有你需要的路线。
  • 所有网址都明确命名

我可以使用语法轻松地生成URL,即使我更改了前缀或资源名称,URL也不会受到影响

URL::route('page', array($id))
斜单鹗
2023-03-14

只需使用资源控制器,将其他方法添加到相同的控制器,并直接将路由添加到这些方法:

Route::group(['prefix' => 'api'], function()
{
    Route::group(['prefix' => 'v1', 'namespace' => 'Api\V1'], function()
    {
        // Add as many routes as you need...
        Route::post('login', 'PostsResourceController@login');
        Route::get('find',   'PostsResourceController@find');
        Route::get('search', 'PostsResourceController@search');

        Route::resource('posts', 'PostsResourceController');
    });
});

另外,我通常会避免使用Route::controller()。这太模棱两可了。

 类似资料:
  • 资源路由 支持设置RESTFul请求的资源路由,方式如下: Route::resource('blog','index/blog'); 表示注册了一个名称为blog的资源路由到index模块的Blog控制器,系统会自动注册7个路由规则,如下: 标识 请求类型 生成路由规则 对应操作方法(默认) index GET blog index create GET blog/create create s

  • 我知道本身不会向路由表添加路由。在您的操作中,您需要声明属性。我很难找到一个权威的blog/msdn页面/说明为什么by defalut不在路由表中添加路由的东西。 有没有人有一个权威的帖子,确实包含了这种情况,如果是这样,你会让我知道是谁。非常感谢。 编辑以澄清我的问题 上面的场景之所以能够工作,是因为我们显式地声明了上的操作有一个空路由。一旦我们这样做,路由就被添加到 第一个场景不起作用,因为

  • 英文原文: http://emberjs.com/guides/routing/setting-up-a-controller/ URL的改变同时也可能改变显示的模板。而模板只有当其搭载了需要呈现的信息才有用。 在Ember.js中,模板从控制器中获取需要呈现的信息。 内置的两个控制器Ember.ObjectController和Ember.ArrayController,使控制器可以非常方便的呈

  • 问题内容: 我是Node.js和Express的新手,我试图理解这两个似乎是重叠的概念,即路由与控制器。 我看过一些简单的例子,app.js + route / *似乎足以路由所需的各种请求。 但是,我也看到有人在谈论使用控制器,并且有些人暗示使用更正式的MVC模型(???)。 如果有人可以帮助我消除这个谜团,并且如果您有一个在Node.js + Express框架中设置控制器的好例子,那就太好了

  • 问题内容: 我正在尝试建立一个视图-我设置了两个控制器进行练习,一个是HeaderCtrl,其中包含一些数据(网站标题,标题背景等),另一个应该具有页面的主要内容- MainCtrl。 在定义路线时,我这样做是: 这工作得很好,但是我想要为此指定多个参数,如下所示: 这行不通,所以我猜这不是做到这一点的方法。我实际上要问的是-您可以在$ routeProvider中指定多个控制器吗?还是构建此视图