覆盖Symfony请求类 - 在何处放置覆盖代码?

时间:2015-05-27 09:53:42

标签: php symfony request

Symfony有一个非常明确的代码示例,说明如何覆盖请求类,但我不知道在我的应用程序中应该放置它。我在控制器操作中从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

1 个答案:

答案 0 :(得分:2)

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

实际上Request::createFromGlobals方法和Request::create方法检查Request::setFactory方法是否设置了可调用对象,如果是,则使用此可调用对象创建一个对象应该扩展Request类。