2017-01-02 3 views
2

Ich teste meinen Code, und ich habe ein Problem mit dem Header. In jedem api i verwendenPHPUnit - getallheaders funktioniert nicht

$headers = getallheaders(); 

das zu bekommen, und das funktioniert gut, wenn ich mit der App testen oder crhome Postbote Erweiterung. Wenn ich meinen Test lauch, wie dies

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

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

wo ich versuche, eine Karte mit diesem qrcode mit einem Benutzer mit diesen Test-Token geschossen (nicht das Token i in der Anwendung verwenden werden), sehe ich einen Anruf wie folgt hier: https://stackoverflow.com/a/11681422/5475228. Der Test auf diese Weise fehlschlägt:

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

+0

aus dem doc: Diese Funktion ist ein Alias ​​für apache_request_headers(). Weitere Informationen zur Funktionsweise dieser Funktion finden Sie in der Dokumentation zu apache_request_headers(). http://php.net/manual/en/function.apache-request-headers.php – Matteo

+0

Welche Version von PHP verwenden Sie? Es sollte von der CLI seit PHP 5.5.7 – Matteo

Antwort

1

i auf diese Weise lösen (dank 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); 
} 

so die normale Anfrage von app get header mit getallheaders(), bekomme die Anfrage von PHPUnit ab Anfrageobjekt Ich weiß nicht warum (wenn jemand das erklären kann) aber funktioniert.

5

von this Artikel:

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

verfügbar sein. Ich benutze auch diese Lösung und funktioniert gut, wenn ich von App oder Postman teste. Aber mit PHPUnit habe ich auch versucht, die Header zu drucken, PHPUnit druckt einen leeren Wert. Ich benutze PHP 5.5.9 – NicolaPez

Verwandte Themen