Laravel 4 只有根路由有效 - 其他路由返回“找不到控制器方法”


Laravel 4 only root route works - other routes return 'Controller method not found'

我已经在Linux主机上的域上设置了laravel,并且设置了WAMP本地主机。

唯一有效的路由是根,当我尝试转到另一条路由时,例如 domain.com/account 我收到"找不到控制器方法"错误。

在我的路由中.php我有:

Route::controller('','LoginController');
Route::controller('account', 'AccountController');

在我的登录控制器中,我只有两种方法。 getIndexpostIndex .

经过几个小时的谷歌搜索没有结果并玩弄路由文件,仍然没有任何效果。

我尝试添加以下路线,但这也不起作用。

Route::any('hello', function(){
    return 'hello!';
});

但是,我随后注释掉了我的Route::controller('','LoginController');行,其他路线开始工作!

然后我把它改成Route::controller('login','LoginController');,这条和其他路线仍然有效。然后我将其更改为Route::any('','LoginController@getIndex');根和其他路由仍然有效。但是,这样做,当我喜欢页面上的登录按钮时,什么也没发生。

所以我的问题真的是,做Route::controller('','LoginController');有什么问题吗?由于其他一切似乎都"有效">

> Laravel将注册路由的内部集合保存在Router类的$routes成员中。调度请求时,将执行从此集合中选取每个元素并使用当前请求进行测试的过程,以找出将处理的路由。此过程受路由注册语句的顺序影响。

使用当前请求测试每个路由时,将编译选择的路由并具有正则表达式模式。此模式将用于通过 preg_match 函数检查当前 URI,如您在 Laravel 源代码中的这一行中看到的那样。

使用Route::controller时,特殊路线将添加到您的routes集合中。如果您的输入Route::controller($uri, $controller)那么此特殊路由将具有正则表达式模式^/$uri/?P<_missing>(.*)$,并告诉Laravel此请求属于$controller控制器类的缺失方法。

在您的情况下,您已将 $uri 的值设置为空字符串,这会导致特殊路由的正则表达式被^/?P<_missing>(.*)$(使用字符串设置$uri /导致相同的效果(。好吧,这个正则表达式将匹配每个 URI。因此,在查找此特殊路由时,内部路由查找过程将中止。这就是引发异常的原因。

注册

Route::controller 方法时,不应像以前那样使用空字符串或/字符串。相反,请使用Route::resource或显式调用(Route::getRoute::post、...(来处理顶级路由。

我没有尝试过,但也许你可以添加一个"/":

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

编辑

我能够重现该问题,并通过更改路线线的顺序来解决:

Route::controller('accounts', 'AccountController');
Route::controller('','LoginController');