2016-04-26 57 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。一旦完成,问题就解决了。

回答

1

我看这样做

  1. 可以使用is_granted函数来检查树枝角色,不从任何控制器 变量的几种方法。 (simpliest)

  2. 可以使用渲染器渲染另一个树枝内的枝条(不推荐,但有时 有用)

  3. 你可以重新定义基础 模板的块在控制器的模板
  4. 您可以让所有的 控制器都插入一个全局控制器,该控制器通过您的基本模板中所需的所有 变量
+0

最后我使用了第二个选项。它在第一次尝试时起作用。我用这个文档引导自己:http:// symfony。com/doc/current/book/templating.html#embedding-controllers –

+0

请注意,在任何情况下使用它都是一个糟糕的解决方案。它对你的菜单或登录个人资料图片等小部件可能有好处,但不要把它用于一切的坏习惯。 (对于性能:它重做整个请求/响应链) – goto

0

试试这个:

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

什么symfony的版本,你呢?

在Symfony \ Bundle \ FrameworkBundle \ Controller \ Controller中有方法getUser(),而且在树枝模板中全局存在app.user变量。如果“角色”是在你的用户的实体的财产,你可以通过app.user.role得到它的枝条

0

只要你的用户的身份验证设置正确,这样的事情将正常工作:

{% if is_granted('ROLE_ADMIN') %} ... {% endif %} 
相关问题