我已经在linux主机上的域上设置了laravel,并且我已经设置了WAMP本地主机。
唯一有效的路由是root,当我尝试转到另一个路由,例如domain.com/account时,我得到一个"找不到Controller方法。"错误。
在我的routes.php文件中,我有:
Route::controller('','LoginController');
Route::controller('account', 'AccountController');
在我的LoginController中,我只有两种方法。 getIndex
和postIndex
。
经过几个小时谷歌搜索没有任何结果,并在路线文件之间玩耍,仍然没有任何效果。
我尝试添加以下无法正常工作的路线。
Route::any('hello', function(){
return 'hello!';
});
但是,我随后注释掉了Route::controller('','LoginController');
行,其他路线开始工作了!
然后我将其更改为Route::controller('login','LoginController');
,这个和其他路线仍然有效。然后我将其更改为Route::any('','LoginController@getIndex');
,根和其他路由仍然有效。但是,这样做,当我在我的页面上登录按钮时没有发生任何事情。
所以我的问题是,Route::controller('','LoginController');
有什么问题吗?其他一切似乎都在工作'
答案 0 :(得分:3)
Laravel在$routes
类的Router
成员中保存已注册路由的内部集合。在调度请求时,将执行从此集合中挑选每个元素并使用当前请求进行测试的过程,以找出将处理的路径。此过程受路由注册语句的顺序影响。
当使用当前请求测试每个路由时,将编译拾取的路由并具有正则表达式模式。如this line in Laravel source所示,此模式将用于preg_match
函数检查当前URI。
使用Route::controller
时,系统会将特殊路线添加到您的routes
集合中。如果您的输入为Route::controller($uri, $controller)
,则此特殊路由将具有正则表达式为^/$uri/?P<_missing>(.*)$
,并告知Laravel此请求属于$controller
的缺失方法控制器类。
在您的情况下,您已将$uri
的值设置为空字符串,这会导致特殊路由的正则表达式为^/?P<_missing>(.*)$
(设置$uri
字符串/
会产生同样的效果)。好吧,这个正则表达式将匹配每个 URI。因此,当查看此特殊路线时,内部路线查找过程将中止。这是抛出异常的原因。
使用/
方法注册时,不应使用空字符串或Route::controller
字符串。相反,请使用Route::resource
或显式调用(Route::get
,Route::post
,...)来处理您的顶级路由。
答案 1 :(得分:0)
我没试过,但也许你可以添加一个“/”:
Route::controller('/','LoginController');
修改强>
我能够重现这个问题,我通过更改路线的顺序解决了问题:
Route::controller('accounts', 'AccountController');
Route::controller('','LoginController');