如何在Symfony2中为WebTestCases设置HTTP_HOST
我的应用程序通过$ this-> get('request') - > getHost()生成一些绝对链接。 问题是:当我尝试运行测试用例时,出现以下错误信息:如何在Symfony2中为WebTestCases设置HTTP_HOST
[例外] 500 |内部服务器错误| Twig_Error_Runtime
[消息]一个例外模板的渲染(“未定义指数:HTTP_HOST”)期间,被扔在行“:: base.html.twig” 69
不知怎的,很明显对于通过CLI调用我的应用程序时没有主机,但我认为必须有一种方法来防止Symfony2抛出该错误。
任何人都知道如何摆脱它?
感谢guys-您的回答引我到正确的方向。 这是没有Symfony2问题,因为我想通过:
它只是直接访问SERVER参数的facebook API PHP包装器。此代码解决了我的问题:
$facebook = $this->container->get('facebook');
$returnUrl = 'http://'.$request->getHost();
$returnUrl .= $this->container->get('router')->generate('_validate_facebook');
$_SERVER['HTTP_HOST'] = $request->getHost();
$_SERVER['REQUEST_URI'] = $request->getRequestUri();
$loginUrl = $facebook->getLoginUrl(array(
'req_perms' => 'publish_stream',
'next' => $returnUrl,
));
return $loginUrl;
现在我的应用程序从Web和CLI再次
您可以创建这样的要求:
$request = Request::create('http://example.com/path');
,这将使HTTP主机进行设置。
也许你可以做的是在调用getter之前直接将你需要的主机注入请求头。通过查看各种参数值来检索主机。首先,检查标题参数X_FORWARDED_HOST
以查看它是否被设置。如果已设置,则返回,否则方法getHost
将检查是否设置了标头参数HOST
,然后检查是否设置了服务器参数SERVER_NAME
,最后是否设置了服务器参数SERVER_ADDR
。
你可以尝试什么是调用getHost
方法之前设置这样的头参数HOST
:
$request = $this->get('request');
$request->headers->set('HOST', 'yourhosthere');
$request->getHost(); // Should return yourhosthere
话虽这么说,我不知道,因为你提的这个错误告诉这将解决问题我们发现模板试图检索索引HTTP_HOST
的值,但它没有被定义。看看$request->getHost
和$request->getHttpHost
的方法,我没有看到任何尝试检索具有HTTP_HOST
作为索引的值,但我可能错过了它。你可以发布文件::base.html.twig
,看看问题是否可以躺在那里。
问候, 马特
+1运行。今天早上用这个拉着我的头发:-) – richsage 2011-06-09 09:26:14