我已经在Linux主机上的域上设置了laravel,并且设置了WAMP本地主机。
唯一有效的路由是根,当我尝试转到另一条路由时,例如 domain.com/account 我收到"找不到控制器方法"错误。
在我的路由中.php我有:
Route::controller('','LoginController');
Route::controller('account', 'AccountController');
在我的登录控制器中,我只有两种方法。 getIndex
和postIndex
.
经过几个小时的谷歌搜索没有结果并玩弄路由文件,仍然没有任何效果。
我尝试添加以下路线,但这也不起作用。
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::get
、Route::post
、...(来处理顶级路由。
我没有尝试过,但也许你可以添加一个"/":
Route::controller('/','LoginController');
编辑
我能够重现该问题,并通过更改路线线的顺序来解决:
Route::controller('accounts', 'AccountController');
Route::controller('','LoginController');