【问题标题】:Named restful routes in Laravel 4在 Laravel 4 中命名为宁静的路线
【发布时间】:2013-05-26 16:14:02
【问题描述】:

所以,我已经能够使用 restful 控制器了

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

class UserController extends BaseController {
    public function getAccount(){}
}

所以/users/account 有效。但是,如果我尝试做类似的事情

Route::any('account',array('as' => 'account','uses' => 'UserController@account'));

然后转到/account,它不起作用(NotFoundHTTPException)。有没有办法结合使用命名路由和 restful 控制器?我喜欢 restful 系统如何分解请求,以及命名路由如何封装 URI 并将它们与函数名称分离。这在 Laravel 3 中有效。我是否在语法中遗漏了某些内容,或者 Laravel 4 是否故意禁止这种混搭行为?谢谢...

【问题讨论】:

    标签: laravel laravel-4 restful-architecture laravel-routing


    【解决方案1】:

    这完全取决于您定义路线的顺序。如果它不起作用,请尝试颠倒定义的顺序。

    但由于 Laravel 旨在让您的生活更轻松,您可以将一组方法名称及其对应的路由名称作为第三个参数传递给 Route::controller

    Route::controller('users', 'UsersController', ['getProfile' => 'user.profile']);
    

    这可能并不直接适用于您的情况,但它非常方便。

    【讨论】:

    • 第三个参数中的数组正是我所需要的。这也大大简化了路由代码。故事的道德,总是检查 Laravel 代码中的函数定义是否有未记录的额外参数......
    • 完美,感谢您公开了这个未记录的功能,我已经为我的控制器命名,因此这从我的视图中消除了一堆不必要的冗长
    • 正是我想要的。但是,我希望我可以在 Controller@__construct() 方法中定义它。 ...我猜你可以 ;) *转到 L4 文档进行一些温和的阅读。
    【解决方案2】:

    试试这个:

    Route::get('/',array('as'=>'named_route','uses'=>'yourRestfulController@getMethod'));
    

    这对我很有效。诀窍是在 @ 部分之后添加动作类型。与 L3 不同,您应该使用方法的全名。

    【讨论】:

      【解决方案3】:

      这对我很有效。诀窍是在 @ 部分之后添加动作类型。与 L3 不同,您应该使用方法的全名。

      因为 REST 前缀 get、post 等是区分它实现什么类型的 REST 的模式。当您命名 RESTful 控制器路由时,它们不再像 RESTful 控制器,而是您希望命名的普通控制器。示例:

      Route::get('user/profile/', array('as'=>'dashboard', 'uses'=>'ProfileController@showDashboard'));
      

      考虑这个: 假设我们希望 SystemController 成为一个 RESTful 控制器,那么您将定义:

      Route::controller('/', 'SystemController'); 
      

      然后您想将 SystemController 上的 postDashboard 命名为 dashboard,因此您将路由修改为:

      Route::get('user/profile/', array('as'=>'dashboard','uses'=>'SystemController@postDashboard'));
      Route::controller('/', 'SystemController');
      

      在那种情况下,postDashboard 不应该通过GET 协议访问,因为我们将其声明为POST,也就是说,如果 Laravel 将其视为 RESTful Controller,因为我们以这种方式命名它它将被视为正常而不是 RESTful,因此我们可以访问它 tru GET 协议。以这种方式命名它是非常不合适的,因为我们首先破坏了我们想要的东西,它告诉 Laravel 将 SystemController 视为 RESTful。

      我认为您必须将 Jason Lewis 的帖子视为合适的答案。没有难过的感觉@arda,因为你也是正确的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-03
        • 1970-01-01
        • 1970-01-01
        • 2011-05-26
        • 1970-01-01
        • 1970-01-01
        • 2015-05-12
        • 1970-01-01
        相关资源
        最近更新 更多