qandidate / stack-request-id

Symfony 请求添加请求ID的中间件。

3.0.1 2021-06-10 06:57 UTC

This package is auto-updated.

Last update: 2024-09-05 14:17:01 UTC


README

为您的 Symfony 请求添加请求ID的中间件

build status

安装

首先,将此项目添加到您的项目的 composer.json 中

$ composer require qandidate/stack-request-id ^1.0

设置

更新您的 app.php 以包含中间件

之前

use Symfony\Component\HttpFoundation\Request;

$kernel = new AppKernel($env, $debug);
$kernel->loadClassCache();

$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);

之后

use Qandidate\Stack\RequestId;
use Qandidate\Stack\UuidRequestIdGenerator;
use Symfony\Component\HttpFoundation\Request;

$kernel = new AppKernel($env, $debug);

// Stack it!
$generator = new UuidRequestIdGenerator(1337);
$stack = new RequestId($kernel, $generator);

$kernel->loadClassCache();

$request = Request::createFromGlobals();
$response = $stack->handle($request);
$response->send();
$kernel->terminate($request, $response);

将请求ID添加到您的 monolog 日志中

如果您使用 Symfony 的 MonologBundle,您可以通过在 services.xml 文件中添加以下服务定义将请求ID添加到您的 monolog 日志中

<service id="qandidate.stack.request_id.monolog_processor" class="Qandidate\Stack\RequestId\MonologProcessor">
  <tag name="kernel.event_listener" event="kernel.request" method="onKernelRequest" priority="255" />
  <tag name="monolog.processor" />
</service>

将请求ID添加到响应中

如果您需要将请求ID随响应一起发送,您可以启用响应头

$generator = new UuidRequestIdGenerator(1337);
$stack = new RequestId($kernel, $generator);
$stack->enableResponseHeader();

您还可以更改响应头的名称

$stack->enableResponseHeader('My-Custom-Request-Id');

如果您无法访问 RequestId 对象实例(例如 StackPHP),则可以通过 RequestId 构造函数方法的第四个参数设置响应头。

$generator = new UuidRequestIdGenerator(1337);
$stack = new RequestId($kernel, $generator, 'X-Request-Id', 'My-Custom-Request-Id');

第三个参数(仅供参考)是头的名称

  • 在回退到生成新的请求ID之前,将检查其值。
  • 用于在 Symfony 的请求对象中存储生成的请求ID。

StackPHP 的中间件构建器

如果您已经使用 StackPHP,只需将 RequestId 类推入构建器即可。

$kernel = new AppKernel('dev', true);

$generator = new UuidRequestIdGenerator(1337);
$stack = (new Stack\Builder)
    ->push('Qandidate\Stack\RequestId', $generator, 'X-Request-Id', 'X-Request-Id')
    ->resolve($kernel);

$kernel->loadClassCache();

$request = Request::createFromGlobals();
$response = $stack->handle($request);
$response->send();
$kernel->terminate($request, $response);