2013-02-28 46 views
1

當我在控制器中執行forward()時,我失去了我的路由和route_parameters。Symfony2爲什麼前向嵌套請求對象?

當我有ParentAction時,它會轉發到ChildAction。在Childaction中,我做return $this->render('myTemplate.html.twig', array());然後請求屬性被嵌套!

所以當模板得到渲染,而不是$request['attributes']['_route_parameters']我得到$request['attributes']['request']['attributes']['_route_parameters']

儘管在ChildAction中,當我做$this->getRequest();時,hierarchie是正常的。

這是一個錯誤,還是我做錯了什麼?

回答

0

可能的解決方案是在轉發時傳遞請求作爲第二個參數。

$response = $this->forward('MyBundle:MyController:myAction', array('request' => $request)); 

此外,作爲前鋒僅僅是核心Symfony2的功能的快捷方式,可以this可能幫助。

+0

你可以檢查我的編輯?我可以閱讀請求等,但有一些奇怪的事情發生。 – Nealv 2013-02-28 10:20:50

0

在我的情況下面的代碼幫助:

$subRequest = $this->container->get('request')->duplicate(
    array(), 
    null, 
    array('topicId' => $topicId,'_controller' => 'SomeBundle:Topic:close')); 

return $this->container->get('http_kernel') 
    ->handle($subRequest, HttpKernelInterface::SUB_REQUEST); 

「主題」是TopicController和「親密」是closeAction

1

的原因是,symfony的不假設你有相同的路由參數。 因此,當您前進時,即使它們相同,您仍需要重新提供新路線所需的路線參數。

(順便說一句,你還必須爲新路線的查詢參數。)

public function indexAction($param) 
{ 

    return $this->forward(
     'AppBundle\\Controller\\DefaultController::otherAction', 
     array("someOtherParam" => $param), 
     $request->query->all() // Causes query string params to be copied 
    ); 
} 

// This route has a different parameter. 
public function otherAction($someOtherParam) ...