2017-01-02 2 views
2

Я тестирую свой код, и у меня есть проблемы с заголовком. В каждом апи я используюPHPUnit - getallheaders не работает

$headers = getallheaders(); 

, чтобы получить это, и это работает прекрасно, когда я проверить с приложением или crhome расширением почтальона. Когда я Lauch мое испытание, как этот

$client = $this->createClient(); 
    $client->request('GET', '/api/shotcard', 
     ['qrcode'=>'D0m1c173'], [], 
     ['HTTP_API_TOKEN' => 'abc123'] 
    ); 

    $this->assertEquals(200, $client->getResponse()->getStatusCode()); 

, где я стараюсь подстрелил карту с этим QRCode с пользователем с тем, что тест-маркер (а не символического я буду использовать в приложении), я вижу вызов как это здесь: https://stackoverflow.com/a/11681422/5475228. тест не пройден таким образом:

PHP Fatal error: Call to undefined function AppBackendBundle\Controller\getallheaders() in /var/www/pitstop/src/AppBackendBundle/Controller/ApiController.php on line 42

+0

from doc: Эта функция является псевдонимом для apache_request_headers(). Пожалуйста, прочитайте документацию apache_request_headers() для получения дополнительной информации о том, как эта функция работает. http://php.net/manual/en/function.apache-request-headers.php – Matteo

+0

какая версия php вы используете? он должен быть доступен из CLI, поскольку PHP 5.5.7 – Matteo

ответ

1

я решить таким образом (благодаря https://stackoverflow.com/a/11681422/5475228)

private function request_headers($type, Request $request) 
{ 
    if(function_exists("getallheaders")) 
    { 
     if($header = getallheaders()[$type]) 
     { 
      return $header; 
     } 
    } 

    return $request->headers->get($type); 
} 

поэтому нормальный запрос от app get header с getallheaders(), запрос от PHPUnit получить его из Запросить объект. Я не знаю, почему (если кто-то может объяснить), но работает.

5

из this статьи:

If you use Nginx, PHP-FPM or any other FastCGI method of running PHP you’ve probably noticed that the function getallheaders() does not exist. There are many creative workarounds in the wild, but PHP offers two very nice features to ease your pain.

if (!function_exists('getallheaders')) { 
    function getallheaders() { 
    $headers = []; 
    foreach ($_SERVER as $name => $value) { 
     if (substr($name, 0, 5) == 'HTTP_') { 
      $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; 
     } 
    } 
    return $headers; 
    } 
} 
+0

Я также использую это решение и отлично работаю, когда тестирую приложение или почтальон. Но с PHPUnit dont я попытался также распечатать заголовки, PHPUnit напечатать пустое значение. Я использую php 5.5.9 – NicolaPez

Смежные вопросы