我正在使用Zend Navigation和ACL。我的用户可以有多个角色,它们彼此没有关系,但是Zend Navigation只接受一个角色并检查具有该角色的ACL,这对我不利。
如何为导航注册一个新的助手,以便我可以覆盖该acceptAcl
方法。我试图创建和注册一个简单的视图助手,但没有奏效
class Menu extends \Zend\View\Helper\Navigation\Menu implements \Zend\ServiceManager\ServiceLocatorAwareInterface
{
protected function acceptAcl(AbstractPage $page)
{
if (!$acl = $this->getAcl()) {
// no acl registered means don't use acl
return true;
}
$userIdentity = $this->getServiceLocator()->get('user_identity');
$resource = $page->getResource();
$privilege = $page->getPrivilege();
$allowed = true;
if ($userIdentity->id !== "1") {
if ($acl->hasResource($resource)) {
$allowed = false;
foreach ($userIdentity->rolls as $roll) {
if ($acl->isAllowed($roll['id'], $resource)) {
$allowed = true;
continue;
}
}
}
}
return $allowed;
}
public function renderMenu($container = null, array $options = array())
{
return 'this is my menu';
}
}
'view_helpers' => array(
'invokables' => array(
'myMenu' => 'Application\View\Helper\Menu',
),
),
我如何注册这个助手以便导航知道它?