2013-03-03 3 views
2

Zend NavigationACL으로 사용하고 있습니다. 내 사용자는 서로 관계가없는 여러 역할을 가질 수 있지만 젠드 탐색은 하나의 역할 만 허용하고 ACL을 확인합니다.ZF2 탐색 사용자 지정 도우미

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', 
    ), 
), 

가 어떻게이 도우미를 등록 할 수 있습니다 작동하지 않았다?

+1

돕는 사람. 맞춤 도우미가 필요하지 않습니다. – Crisp

답변

3

Navigation보기 도우미는 ViewHelperPluginManager에 등록되어 있습니다. 모든 탐색 도우미 (Menu, Breadcrumbs 등)는 별도의 플러그인 관리자에 의해 관리됩니다. 내가 아는 한 아직 구성에서 탐색 도우미를 덮어 쓸 수는 없습니다.

시도는 당신의 Module.php에 다음을 추가합니다 : 주제는 오래

class Module 
{ 
    public function onBootstrap($e) 
    { 
     $application = $e->getApplication(); 
     /** @var $serviceManager \Zend\ServiceManager\ServiceManager */ 
     $serviceManager = $application->getServiceManager(); 

     $pm = $serviceManager->get('ViewHelperManager')->get('Navigation')->getPluginManager(); 
     $pm->setInvokableClass('myMenu', '\Application\View\Helper\Menu'); 
    } 
} 
+0

tnx man it worked – Exlord

4

하더라도, 그 해결책은 ZF2의 v2.3.3에서 나를 위해 작동하지 않았다.

약간의 조사 끝에 Navigation Helper가 공유되지 않았거나 공유를 엉망으로 만드는 나뭇 가지 모듈이며 모듈 부트 스트랩의 사용자 지정 플러그인 (예 : 새 메뉴)을 탐색에 추가하려고하면 효과가 없습니다. 하지만 탐색 플러그인 관리자가 키 아래 모듈, 글로벌 또는 로컬 설정에서 구성 할 수 있습니다

젠드 \ 탐색 \보기 \에게

읽기 탐색 도우미 건설에 HelperConfig.php

를 흥미로운 것을 발견 navigation_helpers. 플러그인을 사용하여 내비게이션을 쉽게 확장 할 수 있습니다.

예 :

module.config.php

당신은 네비게이션을 따라 부모와 함께 ACL의 역할로 사용자를 추가하고 해당 역할 ID를 손으로해야
'navigation_helpers' => array (
    'invokables' => array(
     'menu' => 'Application\View\Helper\Navigation\Menu', 
    ), 
),