路由整个控制器

时间:2013-08-25 16:59:09

标签: php laravel laravel-4

我正在尝试用laravel 4路由整个控制器:

Route::controller('mycontroller', 'MyController');

当用户访问此网址时:

http://my.app/mycontroller/anyMethod

然后anyMethod中的MyController方法应该有效。

它应该适用于该类中定义的所有方法。

目前,当我去:my.app/mycontroller时,它会抛出NotFoundHttpException

当我去:my.app/mycontroller/aDefinedMethod时,它会抛出NotFoundHttpException并说:找不到控制器方法。

有什么问题?

更新:据我所知,Route :: controller()现在在Laravel 4中很安静。那么,我不想要一个安静的控制器,我不想重命名我的方法。那么我应该如何设置一条路线来实现这个目标呢?

4 个答案:

答案 0 :(得分:2)

您将其定义为RESTful控制器。 my.app/mycontroller/index将对应一个名为getIndex()的方法。

答案 1 :(得分:1)

没有看到你的控制器 - 问题可能是你没有定义'宁静'的控制器功能。 Route::controller() is now restful in Laravel 4 - See here for more info.

所以当你去url时

http://my.app/mycontroller/anyMethod

那么它应该是

getAnyMethod()

中的

MyController

答案 2 :(得分:1)

这里有一些问题。一个是您需要将您要查找的操作添加到方法名称中。例如,您的方法名称应为getAnyMethod(),并且会响应mycontroller/any-method

答案 3 :(得分:0)

如果您不想使用RESTful控制器,您应该使用命名路径注册所有控制器的功能,如下所示,以便Laravel 4能够正确反映特定控制器的特定方法并执行它,当您输入URL时在浏览器中。

Route::get('yourcontrollerslug', array('as' => 'your.route.name', 'uses' => 'YourController@someFunctionOne'));
Route::post('yourcontrollerotherslug', array('as' => 'your.route.othername', 'uses' => 'YourController@someFunctionTwo'));

L4 documentation中,它被称为将路由名称(以及结果中的特定路由)映射到控制器操作。

// You may also specify route names for controller actions:

Route::get('user/profile', array('as' => 'profile', 'uses' => 'UserController@showProfile'));

也许实际上还有其他方法可以更方便的方式实现你想要的东西 - 但我不知道这样:)

希望无论如何这会帮助你。