qandidate / stack-request-id
Symfony 请求添加请求ID的中间件。
3.0.1
2021-06-10 06:57 UTC
Requires
- ramsey/uuid: ^4.0
- symfony/http-foundation: ^5.0.7
- symfony/http-kernel: ^5.1.5
Requires (Dev)
- broadway/coding-standard: ^1.2
- phpstan/phpstan: @stable
- phpunit/phpunit: ^9.5
Suggests
- symfony/monolog-bundle: For registering the MonologProcessor
README
为您的 Symfony 请求添加请求ID的中间件
安装
首先,将此项目添加到您的项目的 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);