тонкий каркас 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

Решение

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

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

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

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]