我在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。
答案 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);