【发布时间】:2023-01-27 07:33:45
【问题描述】:
我从 slim4 $request->getHeader('accept') 方法得到一个空数组来进行校验和授权。 $request->getParsedBody() 也工作正常。我遵循了如下文档中的代码,
<?php
declare(strict_types=1);
namespace App\Application\Actions\Users;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
use Psr\Log\LoggerInterface;
use Slim\Psr7\Response;
use Cake\Validation\Validator;
use Selective\Validation\ValidationResult;
use Selective\Validation\Factory\CakeValidationFactory;
use Selective\Validation\Exception\ValidationException;
use PDO;
use \Firebase\JWT\JWT;
use App\Application\Helpers\CommonHelper;
class ChangePwdAction implements RequestHandlerInterface
{
private $logger;
private $connection;
public function __construct(PDO $connection,LoggerInterface $logger)
{
$this->connection = $connection;
$this->logger = $logger;
}
public function handle(ServerRequestInterface $request): ResponseInterface
{
echo $request->getHeader('userId');exit;
}
}
API调用:
<?php
declare(strict_types=1);
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use App\Application\Actions\Users\ListUserAction;
use App\Application\Actions\Users\ChangePwdAction;
$app->group('/v1/user', function (Group $group) {
$group->get('', ListUserAction::class);
$group->post('/changePwd/{id}', ChangePwdAction::class);
});
【问题讨论】:
-
我将从修复您遇到的 500 错误开始。
-
@CBroe - 用日志结果更新了帖子 - 一个空数组
-
您不应该使用名为
userId的标题作为开头。约定是以X-前缀开始任何未由任何标准/RFC 定义的自定义标头名称,因此如果有的话,您应该在此处发送类似X-User-Id的内容。 (也许框架或服务器“过滤掉”了这些违反约定的标头?) -
@CBroe - 我试图传递和接收'X-User-Id',仍然得到同样的错误
-
尝试转储整个
$request->headers,看看能得到什么。您还可以转储 $_SERVER,然后查看从中得到了什么。如果这个标头还没有到达您的应用程序,它可能已经被 PHP / Web 服务器过滤掉(或重写为不同的名称)。
标签: php api header postman slim-4