2016-11-24 4 views
1

render.textを使って、header.twigをbase.twigファイルからレンダリングします。したがって、私のbase.twigには、ヘッダコントローラをトリガするためのコードがあります:symfony2 app.request.getレンダリングされた小枝テンプレートでnullを返します

{{ render(controller('MyBundle:Global:header')) }} 

そのコントローラはheader.twigをレンダリングします。この枝であっファイル言語を変更するための次のコードへのリンク:

<a href="{{ path(app.request.get('_route'), app.request.get('_route_params')|merge({'_locale' : app.request.locale })) }}"><img src="{{ asset('flags/'~app.request.locale~'.png', 'img') }}" /></a> 

オブジェクトがapp.request.get(「_ルート」)とapp.request.get(「_ route_params」)の両方のリターン・ヌルを形成します。

app.request.get('_route') 

同じコードリンクをbase.twigで直接実行すると、要求が正しいオブジェクトを返します。 header.twigには独自のコントローラがあるため、要求が機能していないように見えます。それ以外の方法でアクティブなURLのルートとパラメータを要求することは可能ですか?

+0

'_route_params'がない場合は、デフォルトでemtyオブジェクトになるように、' append.get( '_ route_params'、{}) 'を使用してください。 – qooplmao

+0

エラーを取り除くのに役立ちます。アプリケーションの周りで利用できるように、値が必要です。これらは、スタンダードルートURLとURLのパラメータです。 – Tom

答えて

2

私は最初のケースでは、実際の問題を逃したため、@にGustekの答えを追加します。

_route_route_paramsは、メインリクエストではなくサブリクエストから実際にサブリクエストを表示しています。コントローラを使用しているときは、マスターリクエストからパラメータを取得し、コントローラコールでそれらのパラメータを渡すのが最もクリーンな方法です。レンダーコール(@Gustekが答えたように)でそれらを渡すことができますが、それはあなたがすべての呼び出しでそれを行うことを意味するか、またはリクエストスタックを小枝セッションに渡すことができますが、それは不要な余分な作業になります。

public function headerAction(Request $request) 
{ 
    $masterRequest = $this->container->get('request_stack')->getMasterRequest(); 

    //... 

    return $this->render('MyBundle:Global:header.html.twig', [ 
     //... 
     '_route'  => $masterRequest->attributes->get('_route'), 
     '_route_params' => $masterRequest->attributes->get('_route_params'), 
    ]); 
} 
+0

ありがとう、それはまた素晴らしいソリューションであり、動作します! – Tom

関連する問題