2016-04-26 24 views
2

役割に基づいて動的なメニューを作りたいと思います。今私はパラメータ(役割)を持つマクロとしてメニューを含めていますが、テストする役割を務めています。私はテンプレートのコントローラからロールの価値を得ることができません。symfony2のTWIGを使ってすべてのテンプレートの変数を共有する

ユーザー(すでにコントローラにキャッチされている)の役割をレイアウトに送信する方法があります。

私は、問題を解決する可能性がある、小枝でグローバル変数を作成することの可能性についてたくさん読んでいます。私が言ったように、私は役割を記述する必要があり、

# layout.html.twig # 
{% block menu %} 
    {{ userRole('admin') }} 
{% endblock %} 

取り組んでいますが:

この

は私のコードです。私は価値を得る必要があります。

私はパラメータとして値を送信しようとしましたが、コントローラーにコンテンツがレンダリングされており、レイアウトが拡張されています。

public function loginAction(){ 
$ldaprdn = $_POST['login'];  // ldap rdn or dn 
$ldappass =$_POST['pass']; 

$m = new Model(); 
$params = array('user' => $m->login($ldaprdn,$ldappass),); 

$me = new Model(); 
$user = array('user' => $me->getSettings(),); 

$this->render('::menu.html.twig',$user); 
return $this->render('intranetBundle:Default:landinga.html.twig', $user); 

}

それは私が大きなことで解決できないだけのことです。

可能な解決方法はありますか?たぶん、アーキテクチャの設計は最高のものではありません。または、おそらく私が知らないツールを使用することができます...

大きなことは、どのテンプレートでも、PHPからTWIGへの役割の価値を取得することです。いったん完了すると、問題は解決されます。

{% set var = 'inner variable' %} 
My variable is {{ var }} 

答えて

1

私はあなたが任意のコントローラから 変数なし小枝での役割を確認するためにis_granted機能を使用することができます

  1. を、それを行うにはいくつかの方法を参照してください。あなたは、コントローラのテンプレートにベース テンプレートのブロックを再定義することができます

  2. あなたは別の小枝内部の小枝をレンダリングするために、コントローラをレンダリング使用することができます

  3. (最も単純)(推奨しませんが、時には 便利)

  4. すべての コントローラが、ベーステンプレートに必要な変数 のすべてを渡すグローバルコントローラを持つようにすることができます。
+0

最後に2番目のオプションを使用しました。それは最初の試みで働く。私はこのドキュメンテーションで自分自身を案内しました:http:// symfony。com/doc/current/book/templating.html#embedding-controllers –

+0

すべてのケースで使用することは悪い解決策であることにご注意ください。あなたのメニューやログインプロフィールの写真のようなウィジェットにはいいかもしれませんが、すべてのものに悪用されることはありません。 (パフォーマンスのために、要求/応答チェーン全体をやり直す) – goto

0

はこれを試してみてください?

Symfony \ Bundle \ FrameworkBundle \ Controller \ ControllerのgetUser()メソッドがあり、また、app.user変数がtwigテンプレートにグローバルに存在します。

{% if is_granted('ROLE_ADMIN') %} ... {% endif %} 
:「役割」は、あなたのUserエンティティ内のプロパティがある場合は、
0

あなたは何symfonyのバージョンを使用してください:

0

ユーザー認証が正しく設定される限り、このような何かが正常に動作します小枝

にapp.user.role経由でそれを得ることができます
関連する問題