4

所以,我已经能够让 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 是否故意禁止这种混搭行为?谢谢...

4

3 回答 3

20

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

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

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

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

于 2013-05-31T02:26:52.697 回答
1

试试这个:

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

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

于 2013-06-08T22:26:50.993 回答
0

这对我来说很好。诀窍是在 @ 部分之后添加动作类型。与 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 控制器,因为我们这样命名它将被视为正常而不是 RESTful,所以我们可以访问它 truGET协议. 以这种方式命名它是非常不合适的,因为我们首先破坏了我们想要的东西,它告诉 Laravel 将 SystemController 视为 RESTful。

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

于 2013-11-01T01:54:30.420 回答