mymedia/stack-request-id

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

2.1.0 2018-01-19 14:22 UTC

This package is auto-updated.

Last update: 2024-09-20 06:56:22 UTC


README

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

Build Status

安装

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

$ composer require mymedia/stack-request-id ^2.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 Feedo\Stack\RequestId;
use Feedo\Stack\Uuid4RequestIdGenerator;
use Symfony\Component\HttpFoundation\Request;

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

// Stack it!
$generator = new Uuid4RequestIdGenerator();
$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="feedo.stack.request_id.monolog_processor" class="Feedo\Stack\RequestId\MonologProcessor">
  <tag name="kernel.event_listener" event="kernel.request" method="onKernelRequest" priority="255" />
  <tag name="monolog.processor" />
</service>

将请求 ID 添加到响应中

如果您需要将请求 ID 与响应一起发送,您可以通过启用响应头来实现

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

也可以更改响应头名称

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

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

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

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

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

StackPHP 的 Middleware 构建器

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

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

$generator = new Uuid4RequestIdGenerator();
$stack = (new Stack\Builder)
    ->push('Feedo\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);