2012-01-28 9 views
1

私はレンダリング小枝を使用して、部分的コントローラーで、私は、メインコントローラ名を取得したいオブジェクトではなく、Symfony2の主な要求部分コントローラ

$this->get('request')->get('_template')->get('controller') 

リターンpartial

パーシャルコントローラでメインリクエストオブジェクトを取得する方法はありますか?

今、私が使用します。

{% render 'FooBundle::Controller:action' with {'controller': getControllerName() } %} 

カスタム小枝機能付き。 これを行うにはよりエレガントな方法がありますか?

答えて

2

この値を明示的にレンダリングタグに渡す必要があります。

{% render 'AcmeBundle:Demo:something' with { 'via': app.request.attributes.get('_controller') } %} 
2

おそらく、別のテンプレートを含むincludeタグが必要です。

{% include 'FooBundle::partial.html.twig' %} 

テンプレートを含めるのは、部分的なものだけが必要な場合です。

renderタグは、コントローラの呼び出し、より複雑な作業、またはテンプレートが表示に必要な変数にアクセスできない場合に使用します。あたかもカーネルがスタンドアロン要求のように新しい要求を作成するのです。実際にはESIを使用すると、そのコントローラーへのスタンドアロン要求になる可能性があります。 See here for details。そのため、メインリクエストオブジェクトを取得できません。ESIを使用しているため、またはそのコントローラのルートを作成してAJAXなどを介して呼び出すため、メインリクエストオブジェクトが存在しない可能性があります。あなたのコントローラがサブリクエストを介して呼び出される情報に依存することは、私が知っているようにフレームワークによってサポートされておらず、意図的だと思います。クエリパラメータのすべての情報を渡す必要があります。

あなたの例が正しくない、それはこのようになります:

{% render 'FooBundle:MyController:actionName' ... %} 

あなたはtihsを動作させるために、このようなFooBundle\Controller\MyControllerControllerクラスを持っている必要があります。

namespace FooBundle\Controller; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 

class MyControllerController extends Controller { 
    public function actionNameAction() { 
    ... 
    } 
} 
+0

はい、私はレンダリングの例を誤解し、これを修正しました。しかし、私の質問は開いています:) "FooBundle:MyController:actionName"でメインリクエストオブジェクトを取得する方法は? – rtyshyk

+0

あなたは私が知る限り、それをすることはできません。なぜ私が答えることができないのかについての文章を追加しました。 –

+0

私はそれをどのようにしたかについて、より詳細を付け加えました。 – renoirb

関連する問題