2016-04-29 63 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); 
}); 

我在google chrome中使用邮递员测试此REST服务。 我传递一个自定义标题“Authorization”以及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

它不是苗条的,它被认为是一个PHP功能。如果您发送的不是有效的HTTP基本授权标头,PHP将无法访问它。您可以通过将以下重写规则添加到您的.htaccess文件中来解决此问题。

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

另一种方法是使用apache_request_headers(),但它是Apache特定的,不便携的。

+0

PHP和授权头文件的问题...... ^应该解决它。 +1 @tuupola :) – geggleto

+0

谢谢@tuupola。这有帮助。 RewriteRule工作。 –