2016-04-29 3 views
0

Ниже приведен код, который я использую.slim framework 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); 
}); 

Я использую почтальон в Google Chrome для проверки этого сервиса REST. Я передаю пользовательский заголовок «Авторизация» вместе с запросом GET. Однако эта программа не распознает пользовательские заголовки.

Блок кода

$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

Это не Slim, это считается функцией PHP. Если вы отправляете что-то еще, чем действительный заголовок HTTP Basic Authorization, PHP не будет иметь к нему доступа. Вы можете обойти это, добавив следующее правило перезаписи в ваш файл .htaccess.

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

Другой способ заключается в использовании apache_request_headers() но Apache специфичны и не переносимым.

+0

Проблема с заголовком PHP и авторизацией ...^это должно решить проблему. +1 @tuupola :) – geggleto

+0

Спасибо @tuupola. Это помогло. Работает RewriteRule. –