覆盖 Symfony 请求 Class - 在哪里放置覆盖代码?

Overriding Symfony Request Class - Where to place the override code?

Symfony 有一个关于如何覆盖请求的非常清晰的代码示例 class,但我不知道我应该将它放在我的应用程序中的什么位置。我在我的控制器操作中收到了来自 Symfony 的请求对象,我想改为获取 SpecialRequest 对象。

我已经尝试过 kernel.request 侦听器,但这似乎为时已晚。有没有适合这种初始化代码的地方?

Request::setFactory(function (
    array $query = array(),
    array $request = array(),
    array $attributes = array(),
    array $cookies = array(),
    array $files = array(),
    array $server = array(),
    $content = null
) {
    return SpecialRequest::create(
        $query,
        $request,
        $attributes,
        $cookies,
        $files,
        $server,
        $content
    );
});

http://symfony.com/doc/current/components/http_foundation/introduction.html#overriding-the-request

在给出的示例中,Request::setFactory 方法在调用 Request::createFromGlobals 方法之前立即被调用。这意味着调用此方法的适当位置将在前端控制器中,例如app.php、app_dev.php 和用作前端控制器的任何其他文件。

实际上 Request::createFromGlobals 方法和 Request::create 方法检查 Request::setFactory 方法是否设置了一个可调用对象,如果是,它们使用这个可调用对象创建一个应该扩展请求的对象 class.