как установить HTTP_HOST для WebTestCases в Symfony2

Мое приложение генерирует несколько абсолютных ссылок через $this->get('request')->getHost(). Проблема в том, что когда я пытаюсь запустить тестовые случаи, я получаю следующее сообщение об ошибке:

[исключение] 500 | Внутренняя ошибка сервера | Twig_Error_Runtime

[сообщение] Возникло исключение во время рендеринга шаблона (неопределенный индекс: HTTP_HOST) в ::base.html.twig в строке 69.

Почему-то мне ясно, что при вызове моего приложения через CLI хоста нет, но я думаю, что должен быть способ предотвратить выдачу этой ошибки Symfony2.

Кто-нибудь знает, как от него избавиться?


person stoefln    schedule 11.05.2011    source источник


Ответы (3)


Вы можете создать запрос следующим образом:

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

Это заставит HTTP-хост быть установленным.

person igorw    schedule 11.05.2011

Возможно, что вы могли бы сделать, это внедрить нужный вам хост непосредственно в заголовки запроса перед вызовом геттера. Хост извлекается путем просмотра различных значений параметров. Сначала проверяется параметр заголовков X_FORWARDED_HOST, установлен ли он. Если он установлен, он возвращается, в противном случае метод getHost проверяет, установлен ли параметр заголовков HOST, затем установлен ли параметр сервера SERVER_NAME и, наконец, установлен ли параметр сервера 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 в качестве индекса, но я мог его пропустить. Не могли бы вы опубликовать файл ::base.html.twig, чтобы узнать, может ли проблема заключаться в нем.

С уважением, Мэтт

person Matt    schedule 11.05.2011

Спасибо, ребята, ваши ответы ведут меня в правильном направлении. Как я понял, это не проблема Symfony2:

Это просто PHP-оболочка facebook API, которая напрямую обращается к параметрам SERVER. Этот код решил мою проблему:

$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;

теперь мое приложение снова запускается из Интернета и CLI

person stoefln    schedule 12.05.2011