如何在Symfony2中为WebTestCases设置HTTP_HOST

时间:2011-05-11 14:47:24

标签: testing symfony

我的应用程序通过$ this-> get('request') - > getHost()生成一些绝对链接。 问题是:当我尝试运行测试用例时,我收到以下错误消息:

  

[例外] 500 |内部服务器错误| Twig_Error_Runtime

     

[message]在第69行的“:: base.html.twig”中呈现模板(“Undefined index:HTTP_HOST”)期间抛出异常。

不知怎的,我很清楚,通过CLI调用我的应用程序时没有主机,但我认为必须有办法防止Symfony2抛出该错误。

任何人都知道如何摆脱它?

3 个答案:

答案 0 :(得分:3)

您可以像这样创建请求:

$request = Request::create('http://example.com/path');

这将使HTTP主机设置。

答案 1 :(得分:2)

也许您可以做的是在调用getter之前直接在请求标头中注入您需要的主机。通过查看各种参数值来检索主机。首先,检查headers参数X_FORWARDED_HOST以查看它是否已设置。如果已设置,则返回,否则方法getHost检查是否设置了头参数HOST,如果设置了服务器参数SERVER_NAME,最后是服务器参数{{1已设置。

您可以尝试在调用SERVER_ADDR方法之前设置标头参数HOST

getHost

话虽这么说,我不确定这会解决问题,因为你提到的错误告诉我们模板试图检索索引$request = $this->get('request'); $request->headers->set('HOST', 'yourhosthere'); $request->getHost(); // Should return yourhosthere 的值,但它没有定义。查看方法HTTP_HOST$request->getHost,我没有看到任何尝试检索具有$request->getHttpHost作为索引的值的内容,但我可能错过了它。您是否可以发布文件HTTP_HOST以查看问题是否存在于此处。

此致 马特

答案 2 :(得分:2)

谢谢你们 - 你的回答引导我走向正确的方向。 这不是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运行