Zend Framework : 모듈 식 애플리케이션에서 레이아웃 디렉토리를 어떻게 설정합니까?

StackOverflow https://stackoverflow.com/questions/475236

문제

내가 달성하려는 디렉토리 구조는 다음과 같습니다.

application/default/views/layouts/layout.phtml
application/default/views/scripts/index/index.phtml
application/admin/views/layouts/layout.phtml
application/admin/views/scripts/index/index.phtml
library/Zend
config/config.ini
public/index.php (bootstrap)

그러나 Zend가 각 모듈에서 내 Layout.phtml을 찾도록하는 방법을 알 수 없습니다.

내 부트 스트랩에는 다음과 같습니다.

define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application/'));
define('APPLICATION_ENVIRONMENT', 'testing');

//setup path to our library files
set_include_path( APPLICATION_PATH . '/../library' . PATH_SEPARATOR .
                  get_include_path() );

//register the autoloader
require_once 'Zend/Loader.php';
Zend_Loader::registerAutoload(); 

//set config in the registry
$config = new Zend_Config_Ini( APPLICATION_PATH . '/../config/config.ini', APPLICATION_ENVIRONMENT ); 
Zend_Registry::set('config', $config);

//setup logging
$writer = new Zend_Log_Writer_Stream(APPLICATION_PATH . '/../log/debug.log');
$logger = new Zend_Log($writer);
Zend_Registry::set('logger', $logger);

//run!
$frontController = Zend_Controller_Front::getInstance();
$frontController->addModuleDirectory(APPLICATION_PATH);
//initialize Zend_Layout's MVC helpers
Zend_Layout::startMvc();

$frontController->throwExceptions(true);

try {

    Zend_Controller_Front::getInstance()->dispatch();

} catch (Exception $exception) {

    echo '<html><body><center>'  . 'An exception occured while dispatching the front controller.'; 
    if (defined('APPLICATION_ENVIRONMENT') && APPLICATION_ENVIRONMENT != 'production'  ) {
        echo '<br /><br />' . $exception->getMessage() . '<br />'  . '<div align="left">Stack Trace:' . '<pre>' . $exception->getTraceAsString() . '</pre></div>'; 
    }
    echo '</center></body></html>';
    exit(1);
}

내가 어디로 잘못 가고 있습니까?

업데이트:

나는 이것을 오랫동안 보지 않았으므로 허용 된 솔루션은 최신 상태가 아닐 수 있습니다. 이 질문에 대한 최신 솔루션을 게시하려면 (예 : ZF 1.8+), 그렇게하십시오! 이에 대한 해결책을 찾고있는 다른 사람들에게 도움이 될 것입니다.

도움이 되었습니까?

해결책

체크 아웃해야합니다 모듈 별 zend_layout,이 기사에서 저자는 당신이 달성하려는 것을 정확히 다룹니다. 그의 방법론은 레이아웃 등록을 처리하는 전면 컨트롤러 용 플러그인을 작성하는 것입니다.

다른 팁

Zend Framework 1.12 사용 (이전 버전에서는 테스트하지 않음) : 상자 밖으로 작동합니다!

나는 보통 Application.ini를 사용하여 레이아웃을 활성화하기 위해 구두로 물건을 설정합니다.

resources.layout.layout = "layout"

... 또는 기본 레이아웃을 호출해야합니다. "LayoutPath"가 정의되지 않았으므로 Zend_layout은 "layout.phtml"이라는 파일의 "Application/Modules // views/scripts"를 살펴 봅니다.

Zend 도구를 사용하면 다음 줄로 레이아웃을 시작합니다.

resources.layout.layoutPath = APPLICATION_PATH "layouts/scripts"

또한 디렉토리를 삭제하거나 기본 "Layout.phtml"을 작성하지 않으면됩니다. 해당 디렉토리에 기본 레이아웃이 발견되지 않으면 "Application/Modules //보기/스크립트"내부 "Layout.phtml"에 대해 이전과 같이 DE 모듈을 살펴 봅니다.

레이아웃이 모듈 내부에 발견되지 않으면 기본 모듈의 레이아웃이로드됩니다.

저것과 같이 쉬운!

템플릿으로 추가 작업이 필요한 경우 플러그인을 추가 할 수 있습니다.

resources.layout.pluginClass = "YourLibrary_Controller_Plugin_Layout"

그리고 그 안에 여분의 일을하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top