2016-04-29 16 views
0

Folgendes ist der Code, den ich verwende.schlanke Rahmen PSR nicht benutzerdefinierte Header erkennen

<?php 
use \Psr\Http\Message\ServerRequestInterface as Request; 
use \Psr\Http\Message\ResponseInterface as Response; 

$app = new \Slim\App; 

function handle_response($output, $response){ 
    if($output['status'] === "failed"){ 
     $response = $response->withStatus(400); 
     $response->getBody()->write(json_encode($output)); 
    } 
    else{ 
     $response->getBody()->write(json_encode($output)); 
    } 
    return $response; 

} 

/* user profile */ 
$app->get('/user/profile', function (Request $request, Response $response) { 
$headers = $request->getHeaders(); 
foreach ($headers as $name => $values) { 
$name . ": " . implode(", ", $values); 
} 
    if ($request->hasHeader('Authorization')) { 
    $output['token'] = 'yes'; 
} 
    else 
     $output['token'] = $name; 

     $output['status'] = "success";  
     return handle_response($output, $response); 
}); 

Ich benutze Postman in Google Chrome, um diesen REST-Dienst zu testen. Ich übergebe einen benutzerdefinierten Header "Authorization" zusammen mit der GET-Anfrage. jedoch erkennt dieses Programm keine benutzerdefinierten Header.

Der Codeblock

$headers = $request->getHeaders(); 
foreach ($headers as $name => $values) { 
    $name . ": " . implode(", ", $values); 
} 

gibt nur den Header "HTTP_ACCEPT_LANGUAGE".

Bitte helfen Sie mir herauszufinden, was hier schief gelaufen ist.

+0

Was sollte Ihr letzter Codeblock tun? Es verkettet einfach Zeichenfolgen, aber das Ergebnis wird in keiner Weise verwendet, es wird weder zurückgegeben noch wird es irgendwo wiederholt. Wenn Sie sich 'unbekannte Variablen' oder Arrays ansehen wollen, versuchen Sie [var_dump()] (http://php.net/manual/en/function.var-dump.php) und veröffentlichen Sie die Ausgabe. (Sie sollten die Ausgabe von 'var_dump ($ request-> getHeaders()));') – tillz

Antwort

2

Es ist nicht Slim, es gilt als eine PHP-Funktion. Wenn Sie etwas anderes als den gültigen HTTP Basic Authorization-Header senden, hat PHP keinen Zugriff darauf. Sie können das umgehen, indem Sie Ihrer .htaccess-Datei die folgende Rewrite-Regel hinzufügen.

RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 

Ein anderer Weg ist apache_request_headers() zu verwenden, aber es ist spezifisch Apache und nicht tragbar.

+0

Das Problem mit PHP und Authorization-Header ...^Dies sollte es lösen. +1 @tuupola :) – geggleto

+0

Danke @tuupola. Das hat geholfen. Die RewriteRule hat funktioniert. –