ZF2将ACL注入导航

时间:2013-12-07 07:34:00

标签: navigation zend-framework2 acl

我在Zend Framework 2项目中有一个有效的ACL模块和导航设置。 导航对象生成并正确呈现,但它包含一个元素admin,我只想在登录用户具有角色admin时呈现该元素。当非管理员试图访问那里的任何页面时,acl正确地阻止访问(即重定向到403页面),但是导航仍然呈现导航项目。 导航设置非常简单(因为它应该基于阅读教程)

module.config.php

'service_manager' => array(
    'factories' => array(
        'navigation' => 'Zend\Navigation\Service\DefaultNavigationFactory',
    ),
),

view.phtml

<div id="navigation">
    <?php echo $this->navigation('navigation')
                    ->menu()
                    ->setMinDepth(0)
                    ->setMaxDepth(0)
                    ->setAcl($this->acl)
                    ->setRole('guest'); ?>
</div>

经过大量的调试后,我确定了出错的地方,但我不知道为什么或如何修复它。我在视图中尝试了var_dumping $this->acl,并按预期设置了它。但是:

var_dump($this->navigation('navigation')->getAcl());

setAcl()行之后,返回NULL。所以似乎setAcl($this->acl)实际上并没有注入acl。

2 个答案:

答案 0 :(得分:0)

我有同样的问题并通过在菜单之前添加setAcl和setRole来解决它:

echo $this->navigation('navigation')->setAcl($this->acl)->setRole($this->role)->menu()->setPartial('partial/navbar.phtml');

答案 1 :(得分:0)

模块引导程序中的某处

\Zend\View\Helper\Navigation::setDefaultAcl($acl);
\Zend\View\Helper\Navigation::setDefaultRole($role);