如何根据symfony2上记录的用户角色呈现动态菜单

时间:2014-03-09 05:23:39

标签: templates symfony menu twig role

根据用户角色,在模板中生成动态菜单(菜单将出现在所有其他应用程序的页面中)的最佳做法是什么? 我在我的主模板中使用它:

{{render(controller('AcmeMainBundle:Sidebar:show'))}}  

这是控制器

class SidebarController extends Controller {
    public function showAction() {

        $userRole = $this->getUser()->getRoles();        
        if (in_array("ROLE_ADMIN", $userRole)) {
            return $this->render('AcmeMainBundle:Sidebar:sidebarAdmin.html.twig');
        } else {
            return $this->render('AcmeMainBundle:Sidebar:sidebarUser.html.twig');
        }
    }
}

但我认为这不好;你怎么看?谢谢!

2 个答案:

答案 0 :(得分:3)

您也可以在视图级别实现此目的。在模板中,根据角色

检查活动用户的角色并隐藏/显示菜单
{% if is_granted('ROLE_ADMIN') and not is_granted('ROLE_USER') %}

//Show admin stuff

{% else if is_granted('ROLE_USER') %}

//Show user stuff

{% endif %}

答案 1 :(得分:0)

如果你真的想为两者使用相同的模板而模板中没有逻辑,你可以将参数传递给render方法,以提供菜单中将出现的元素。