2015-05-27 69 views
2

Symfony在如何覆蓋請求類方面有一個非常明確的代碼示例,但我不知道我的應用程序中應該放置它的位置。我在我的控制器動作中收到來自Symfony的請求對象,並希望獲得SpecialRequest對象。重寫Symfony請求類 - 在哪裏放置覆蓋代碼?

我已經嘗試了一個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

回答

2

在給出的例子中,Request::setFactory方法被調用之前立即調用Request::createFromGlobals方法。這意味着調用此方法的適當位置將在前端控制器中,例如, app.php,app_dev.php以及用作前端控制器的任何其他文件。

事實上Request::createFromGlobals方法和Request::create方法檢查,看是否可贖回已被Request::setFactory方法設置的,如果是這樣,他們用這個調用來創建一個對象,應該擴展請求類。