苗条框架 PSR 无法识别自定义 header
slim framework PSR not recognising custom header
以下是我使用的代码。
<?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 服务。
我正在传递自定义 header "Authorization" 以及 GET 请求。
但是,此程序无法识别任何自定义 headers.
代码块
$headers = $request->getHeaders();
foreach ($headers as $name => $values) {
$name . ": " . implode(", ", $values);
}
只有returns header "HTTP_ACCEPT_LANGUAGE".
请帮我弄清楚,这里出了什么问题。
它不是 Slim,它被认为是 PHP 功能。如果您发送的不是有效的 HTTP 基本授权 header,PHP 将无法访问它。您可以通过将以下重写规则添加到 .htaccess
文件来解决此问题。
RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
另一种方法是使用 apache_request_headers()
,但它是特定于 Apache 的,不可移植。
以下是我使用的代码。
<?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 服务。 我正在传递自定义 header "Authorization" 以及 GET 请求。 但是,此程序无法识别任何自定义 headers.
代码块
$headers = $request->getHeaders();
foreach ($headers as $name => $values) {
$name . ": " . implode(", ", $values);
}
只有returns header "HTTP_ACCEPT_LANGUAGE".
请帮我弄清楚,这里出了什么问题。
它不是 Slim,它被认为是 PHP 功能。如果您发送的不是有效的 HTTP 基本授权 header,PHP 将无法访问它。您可以通过将以下重写规则添加到 .htaccess
文件来解决此问题。
RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
另一种方法是使用 apache_request_headers()
,但它是特定于 Apache 的,不可移植。