2012-10-04 4 views
1

두 컨트롤러가 포함 된 zendframework 2 애플리케이션에 모듈이 있습니다. 컨트롤러의 동작 중 하나에 다른 레이아웃을 설정하고 싶습니다. 모듈 설정 파일 내에 설정하는 방법이 있습니까?ZendFramework 2의 컨트롤러 관련 레이아웃

P .: 컨트롤러의 __CONSTRUCT 메소드에서 다음 명령을 사용하여 설정하려고했으나 제대로 작동하지 않았습니다.

$event = $this->getEvent(); 
$event->getViewModel()->setTemplate('layout/MYLAYOUT'); 

하지만 위의 명령을 내 컨트롤러의 각 동작 안에 사용하면 정상적으로 작동합니다.

답변

2

현재 샘플 프로젝트를 열 수 없으므로 올바른 방향으로 알려줄 수 있습니다. Evan Coury는 모듈 별 레이아웃을위한 메소드를 게시했습니다. 다음 링크를 참조하십시오 :

Module Specific Layouts in Zend Framework 2

<?php 
namespace MyModule; 

use Zend\ModuleManager\ModuleManager; 

class Module 
{ 
    public function init(ModuleManager $moduleManager) 
    { 
     $sharedEvents = $moduleManager->getEventManager()->getSharedManager(); 
     $sharedEvents->attach(__NAMESPACE__, 'dispatch', function($e) { 
      // This event will only be fired when an ActionController under the MyModule namespace is dispatched. 
      $controller = $e->getTarget(); 
      $controller->layout('layout/alternativelayout'); 
     }, 100); 
    } 
} 

지금이 도움이? 음, $controller가 호출 된 컨트롤러와 액션 저장을 모두 가지고 있어야 할 방법에 대해 설명합니다. $controller에서 호출 된 작업을 확인한 다음 이에 따라 레이아웃을 지정할 수 있습니다.

나는 현재 방향을 알려줄 수는 있지만 유감 스럽지만 시작에 도움이 될 것이라고 확신합니다.

+0

글쎄, 내가 아닌 특정 컨트롤러에게이 전체 모듈에 대한 레이아웃을 변경할 것이라고 생각 – Behzadsh

2

레이아웃, 뷰 등을 쉽게 조정할 수있는 좋은 방법은 akrabat's examples을 참조하십시오.

특히 찾고있는 것은 his github here입니다. 여기

은/설정 컨트롤러의 동작 방법의 잘라 내기 - 붙여 넣기가 대체 레이아웃을 사용하는 것입니다 :

public function differentLayoutAction() 
{ 
    // Use a different layout 
    $this->layout('layout/different'); 

    return new ViewModel(); 
} 

편집 : akrabat이 줄 수있는 Change the layout for every action within a module을 말한다 예를 것 같습니다 설정에서 레이아웃을 설정하기위한 가장 좋은 포인터. 하지만 코드를 살펴 봤는데 예제가 아직 완성되지 않았습니다. 레이아웃을 변경하지 않았습니다.

0

@ Sam의 대답은 질문에 거의 답합니다. 그냥 같이 할 수있는 컨트롤러가 호출되는 체크 필요로 언급 한 바와 같이 :

<?php 
namespace MyModule; 

use Zend\ModuleManager\ModuleManager; 

class Module 
{ 
    public function init(ModuleManager $moduleManager){ 
     $sharedEvents = $moduleManager->getEventManager()->getSharedManager(); 
     $sharedEvents->attach(__NAMESPACE__, 'dispatch', function($e) { 
       $controller = $e->getTarget(); 
       if ($controller instanceof Controller\AltLayoutController) { 
        $controller->layout('layout/alternativelayout'); 
       } 
      }, 100); 
    } 

내가