我已经苦苦挣扎了近一个星期,但找不到一个好的解决方案。
我正在使用laravel 4.2和php 5.7.27
我正在使用自定义虚拟主机:http://local.io
我正在使用本地化,如果在浏览器中输入,它将像这样:http://local.io/en/user/signin
这是我的测试功能:
public function testViewSignin()
{
App::setLocale('en');
$result = $this->call('GET', '/user/signin', [], [], ['HTTP_HOST' => 'local.io']);
}
但是在终端./vendor/bin/phpunit --verbose
中运行它时,我总是收到html代码307
,消息是Redirecting to http://local.io/en
。
仔细检查后,服务器变量如下:
SERVER_NAME => localhost
HTTP_HOST => localhost
HOST => local.io
我一直在玩:
1. open phpunit.xml file, add <server name="host" value="local.io"/> and <server name="http_host" value="local.io"/>
2. open TestCase.php, add URL::forceRootUrl('http://local.io'); in the setUp() function
3. I even change the server headers in the $this->call() function
但是它总是将我重定向到http://local.io/en
希望有人能给我一些线索。
答案 0 :(得分:0)
我终于找到了答案,我在这里分享了它,希望它可以帮助遇到同样问题的其他人。
该问题是由mcamara本地化软件包引起的,对于服务器的每个请求,服务器都将重定向到localized URL
,然后客户端浏览器将发送另一个请求以及locale
值,例如{{ 1}},因此对于每个请求都是重复请求。
我决定编写一个新的帮助器类,然后将其附加到路由文件(管理员和用户),它将检查环境是否为en
,它将仅返回1个过滤器,否则将返回2个过滤器。
有关完整答案和解决方案的信息,请遵循本文: https://www.munderwood.ca/index.php/2016/03/16/testing-routes-with-laravel-localization/#comment-1562
此问题仅发生在Laravel 4.2中,至于版本5及更高版本,mcamara已经提供了一种解决方法,只需访问其github页面并滚动至底部