2013-10-11 45 views
14

請求我的理解是使用{% render() %}會自動強制發送一個新的請求對象,但即時通訊好奇,如果那裏有一個辦法在發起請求作爲參數傳遞?Symfony2的:在枝杈,通過與渲染功能

{% render('some_action', {'originalRequest': app.request}) %} 

這似乎並不爲控制器做任何事情:

public function actionAction($originalRequest = null) 
{ 
    // $originalRequest ends up just being null 
} 

林假設其因爲路線的方式是設置:

some_action: 
    pattern: /stuff/ 
    defaults: { _controller:SomeApp:Controller:action } 

我想像數據就像那個URL顯然不能分開一樣,所以有些類型的方法可以將數據傳遞給可渲染的URL,什麼都可以?

EDIT(解決方案)

的解決辦法是,從長遠來看很簡單,因爲Petre的Pătraşc下面已經證明,在嫩枝,所有我需要做的是直接調用控制器,並用這種方法我可以傳入對象(如Request對象)和Arrays,而不是URL中的文本值。
要在控制器執行大致相同的想法,利用forward()方法從路由器,將使同樣的效果,而無需將用戶重定向到另一頁。

回答

7

如果我理解正確,你正在尋找這樣的:

​​
+0

我終於在我的答案出來不相容只是當你發佈這哈哈這是門票,但!不使用路由器,只需調用控制器直接 – RedactedProfile

+0

我很好奇,你說的是使用forward()方法或以其他方式?用您的解決方案更新原始問題將會很好,因爲它可能是一個邊緣案例並幫助某人!當試圖此 –

+0

枝條只是拋出一個錯誤的請求。 – skerit

7

使用的渲染功能,結果

{{ render(controller('MyBundle:ControllerName:example', {'originalRequest': app.request})) }} 

,然後在你的控制器

public function exampleAction(Request $originalRequest) 
{ 
    // do something 
} 
+0

而有趣的方法的參數名稱必須相同,也 – skerit

-1

由於Symfony 2.4可以通過request_stack訪問原始請求。這避免了需要創建一個新的方法參數。

function exampleAction() { 
    $request = $this->get('request_stack')->getMasterRequest(); 
    //do something 
} 

使用此小心,因爲它使你的子請求具有ESI /反向代理(其中一個子請求也是主要求)http://symfony.com/blog/new-in-symfony-2-4-the-request-stack

+0

請解釋什麼是錯的這個答案之前反對投票,所以我可以批准它 – lookbadgers