2016-04-29 9 views
0

以下は私が使用しているコードです。スリムフレームワークPSRがカスタムヘッダを認識しない

<?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); 
}); 

私はこのRESTサービスをテストするためにgoogle chromeのpostmanを使用しています。 GETリクエストとともにカスタムヘッダー "Authorization"を渡しています。 ただし、このプログラムはカスタムヘッダーを認識しません。

コードブロック

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

のみヘッダ "HTTP_ACCEPT_LANGUAGE" を返します。

ここで何が間違っているのか理解してください。

+0

最後のコードブロックは何をすべきですか?文字列を連結するだけですが、結果は決して使用されず、返されず、どこにでもエコーされます。 '不明な変数'や配列を見たい場合は、[var_dump()](http://php.net/manual/en/function.var-dump.php)を試して、出力を投稿してください。 (あなたは 'var_dump($ request-> getHeaders());')の出力を掲示しなければなりません – tillz

答えて

2

スリムではなく、PHPの機能と見なされます。有効なHTTP Basic Authorizationヘッダー以外のものを送信している場合、PHPはアクセスできません。これを回避するには、.htaccessファイルに次の書き換えルールを追加します。

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

もう1つの方法はapache_request_headers()を使用することですが、Apache固有でポータブルではありません。

+0

PHPとAuthorizationヘッダの問題...これで解決します。 +1 @ tuupola :) – geggleto

+0

ありがとう@tuupola。それが助けになりました。 RewriteRuleが機能しました。 –

関連する問題