Laminas API 工具取决于您使用的是 RPC 还是 REST 资源。我将解释 Laminas API 工具为您提供哪些工具来评估接收到的标头数据。
您不必重新发明轮子,因为当您使用 fetch 方法时,Laminas API Tools 已经在手边接收到了标头。
具象状态转移 (REST)
Rest 资源通常扩展 \Laminas\ApiTools\Rest\AbstractResourceListener 类。这个类监听\Laminas\ApiTools\Rest\ResourceEvent。幸运的是,此事件为您提供了一个请求对象,其中还包含接收到的标头数据。
<?php
declare(strict_types=1);
namespace Marcel\V1\Rest\Example;
use Laminas\ApiTools\Rest\AbstractResourceListener;
class ExampleResource extends AbstractResourceListener
{
public function fetch($id)
{
// requesting for an authorization header
$token = $this->getEvent()->getRequest()->getHeader('Authorization', null);
if ($token === null) {
// header was not received
}
}
}
如您所见,ResourceEvent 在调用 getRequest() 时返回一个 \Laminas\Http\Request 实例。请求实例已包含您收到的所有请求标头。只需使用给定名称调用getHeader,并将默认值作为第二个参数,当标头设置为 noch 时,应返回该默认值。如果没有 http_token 标头,则结果为 null。
远程过程调用 (RPC)
由于 RPC 请求是使用 MVC 控制器类处理的,因此您可以像在休息资源中一样简单地获取请求。控制器类扩展自 \Laminas\Mvc\Controller\AbstractActionController,它已经包含一个请求实例。
<?php
declare(strict_types=1);
namespace Marcel\V1\Rpc\Example;
class ExampleController extends AbstractActionController
{
public function exampleAction()
{
$token = $this->getRequest()->getHeader('Authorization', null);
if ($token === null) {
// token was not set
}
}
}
正如您所见,在 rpc 请求中获取标头数据与在资源侦听器中一样简单。过程相同,因为这里也使用了请求实例。
结论
绝对不需要编码已经存在的东西。只需从事件或抽象控制器中获取请求实例并检索所需的标头即可。此外,您可以通过调用->getHeaders() 而不是->getHeader($name, $default) 来检查所有收到的标头。您将获得一个 \Laminas\Http\Header 实例,其中包含所有接收到的标头。