Php 通过symfony2中的细枝共享所有模板中的变量
我想制作一个基于角色的动态菜单。现在,我将菜单作为一个带有参数(角色)的宏包含在内,但我正在编写要测试的角色,它可以工作。我无法从模板上的控制器获取角色的值 问题是如何将用户角色(已在控制器上捕获)发送到布局Php 通过symfony2中的细枝共享所有模板中的变量,php,symfony,twig,Php,Symfony,Twig,我想制作一个基于角色的动态菜单。现在,我将菜单作为一个带有参数(角色)的宏包含在内,但我正在编写要测试的角色,它可以工作。我无法从模板上的控制器获取角色的值 问题是如何将用户角色(已在控制器上捕获)发送到布局 public function loginAction(){ $ldaprdn = $_POST['login']; // ldap rdn or dn $ldappass =$_POST['pass']; $m = new Model(); $params = arr
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);
我已经读了很多关于在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 }}
您使用什么symfony版本
Symfony\Bundle\FrameworkBundle\Controller\Controller中有方法getUser(),并且app.user变量全局存在于twig模板中。如果“角色”是您的用户实体中的属性,您可以通过Twig中的app.User.role获取它,只要您的用户身份验证设置正确,类似这样的功能就可以正常工作:
{% if is_granted('ROLE_ADMIN') %} ... {% endif %}
我看到了几种方法
最后我使用了第二个选项。它在第一次尝试时就起作用了。我用这个文档指导自己:请注意,在任何情况下使用它都不是一个好的解决方案。它可以很好地用于一些小部件,如菜单或登录配置文件图片,但不要把它用于任何事情。(对于性能:重做整个请求/响应链)