2013-10-11 14 views
14

{% render() %}を使用すると自動的に新しいリクエストオブジェクトが強制的に送信されますが、元のリクエストを引数として渡す方法があるのでしょうか?Symfony2:Twigで、Request with Render関数を実行します。

{% 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にデータを渡すための何らかのタイプの方法、まったく何か?以下はPetrePătraşcが実証されているよう

EDIT(ソリューション)

ソリューションは小枝に、私が行うために必要なすべてが、そのアプローチで、直接コントローラを呼び出したことが、長期的にはかなり簡単でしたURLのテキスト値ではなく、オブジェクト(Requestオブジェクトなど)と配列を渡すことができます。
ルータのforward()メソッドを利用して、コントローラでほぼ同じ考え方を実行するには、ユーザを別のページにリダイレクトせずに同様の効果が得られます。

答えて

7

私が正しく理解していれば、あなたはこのを探しているに:

​​
+0

私はようやく私の答えに出くわした(サブリクエストもマスタ要求である)のESI /リバースプロキシと互換性のないあなたのサブ要求を行うようちょうどあなたがこの笑顔を掲示したので、これはチケットだった!ルーターを使用せず、コントローラを直接呼び出すだけです – RedactedProfile

+0

私は不思議です、あなたはforward()またはそれ以外のものを使用していますか?エッジケースであり、誰かを助けるかもしれないので、オリジナルの質問をあなたの解決策で更新するのはいいでしょう! –

+0

これを試してみると、Twigはエラーリクエストをスローします – skerit

7

ので

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

メソッドのパラメータ名に注意するのは面白いです – skerit

-1

を結果

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

としてレンダリング機能を使用して、あなたのコントローラでSymfony 2.4では、request_stack経由で元のリクエストにアクセスできます。これにより、新しいメソッドパラメータを作成する必要がなくなります。

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

使用慎重にこのことはhttp://symfony.com/blog/new-in-symfony-2-4-the-request-stack

+0

私はそれを承認するために、投票の前に何が問題なのか説明してください。 – lookbadgers

関連する問題