2014-07-26 4 views
0

3 가지 레이아웃이있는 프로젝트가 있습니다. 로그인 페이지의 레이아웃, 관리자 및 편집자를위한 레이아웃, 관리자가 액세스 할 수있는 일반 사용자를위한 레이아웃 (이 레이아웃은 3 명의 사용자가 설문 조사를 작성할 수있는 3 개의 다른 페이지 레이아웃입니다. 여러 떼).ZF2 사용자 그룹 특정 레이아웃

현재로서는 EdpModuleLayouts를 사용하고 있습니다.이 목적으로 지금까지는 문제가 없었습니다. 이제는 사용자 그룹이 액세스하는 위치에 따라 3 번째 레이아웃을 적용해야하기 때문입니다.

이 작업을 수행하는 방법에 대해 알고 있습니까?

미리 감사드립니다.

+0

레이아웃이나 레이아웃을 조정해야합니까? 즉, 설문 조사에 대한 링크가 메뉴에 있으며 관리자에게 숨기고 싶습니까? – lluisaznar

+0

글쎄, 거기에 몇 가지 변경 사항이 있기 때문에 나는 전체 레이아웃을 교체해야합니다. 설문 조사에 대한 링크는 내비게이션에 없으며 기본 화면에 있으며 로그인 한 사용자에 대한 설문 조사가 표시됩니다. 하지만 ins0의 해결책은 괜찮습니다. 어쨌든 고마워요 .- – Velixir

답변

0

당신은 zf2 mvc 이벤트를 듣고 기준에 따라 레이아웃을 변경할 수 있습니다. 이것은 응용 프로그램 Module.php의 모습입니다.

public function onBootstrap(MvcEvent $e) 
{ 
    $application = $e->getApplication(); 
    $serviceManager = $application->getServiceManager(); 
    $eventManager = $application->getEventManager(); 
    $sharedManager = $eventManager->getSharedManager(); 

    // DISPATCH EVENT 
    $sharedManager->attach('Zend\Mvc\Controller\AbstractActionController', 'dispatch', function(MvcEvent $e) use ($serviceManager) { 

     // get your instance to locate current user group or something else 
     $auth = $serviceManager->get('Some/Auth/Service'); 
     $userGroup = $auth->getUserGroupFromCurrentUser(); 

     $controller  = $e->getTarget(); 

     if($userGroup == 'someGroup') 
     { 
      $controller->layout('layout/somelayoutname'); 
     } else { 
      $controller->layout('layout/someotherlayoutname'); 
     } 
    }, 50); 
} 
+0

감사합니다. 완벽하게 작동합니다 :-) – Velixir