-1

我正在尝试使用 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

4 回答 4

2

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

于 2013-08-25T17:05:28.910 回答
1

你这里有几个问题。一是您需要在方法名称之前添加您要查找的操作。因此,例如,您的方法名称应该读取getAnyMethod()并且它会响应mycontroller/any-method.

于 2013-08-26T17:59:35.290 回答
1

没有看到您的控制器 - 问题可能是您没有定义“宁静”的控制器功能。Route::controller() 现在在 Laravel 4 中是宁静的 - 请参阅此处了解更多信息。

因此,当您访问 url 时

http://my.app/mycontroller/anyMethod

那么应该是

getAnyMethod()在你的MyController

于 2013-08-25T17:05:32.800 回答
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 文档中,它被称为将路由名称(以及特定的路由)映射到控制器操作。

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

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

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

无论如何,希望这对您有所帮助。

于 2013-08-28T12:25:10.480 回答