在Laravel 4中命名为宁静的路线

时间:2013-05-30 22:52:14

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

所以,我已经能够让安静的控制器与

一起工作了
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是否故意禁止这种混合搭配行为?感谢...

3 个答案:

答案 0 :(得分:20)

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

但是因为Laravel就是为了让你的生活更轻松,你可以将一系列方法名称及其相应的路线名称作为第三个参数传递给Route::controller

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

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

答案 1 :(得分:1)

试试这个:

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

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

答案 2 :(得分:0)

  

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

因为REST前缀get,post等是用于区分它实现的REST类型的模式。当你命名restful controllers route时,它们不再像RESTful控制器那样,而是你希望命名的普通控制器。例如:

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

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

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

然后,您希望将SystemController上的postDashboard命名为信息中心,因此您将路由修改为:

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,因为你也是正确的。