Zend Framework: Как настроить каталог компоновки в модульном приложении? - PullRequest
3 голосов
/ 24 января 2009

структура каталогов, которую я пытаюсь достичь, будет такой:

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 в каждом из моих модулей.

в моей начальной загрузке у меня есть:

<code>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() . '
'; } echo ''; выход (1); }

Куда я иду не так?

Обновление:

Я давно не смотрел на это, поэтому принятое решение может быть неактуальным. Если кто-то хочет опубликовать более актуальное решение этого вопроса (например, ZF 1.8+), сделайте это! Это было бы полезно для тех, кто ищет решение этой проблемы.

Ответы [ 2 ]

4 голосов
/ 24 января 2009

Вы должны проверить За модуль Zend_Layout , в этой статье автор описывает именно то, что вы пытаетесь достичь. Его методология - написать плагин для фронт-контроллера, который обрабатывает регистрацию макетов.

2 голосов
/ 26 ноября 2012

Использование Zend Framework 1.12 (не тестировал его в предыдущих версиях): работает "из коробки"!

Обычно я использую application.ini для настройки, а для включения раскладок - в другом:

resources.layout.layout = "layout"

... или как должен называться макет по умолчанию. Поскольку "layoutPath" не был определен, Zend_Layout будет искать в "Application / modules // views / scripts" файл с именем "layout.phtml"

Если вы используете Zend Tool, он запустит макеты со следующей строкой:

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

Это тоже хорошо, просто удалите каталог или избегайте создания по умолчанию "layout.phtml". Если макет по умолчанию не найден в этом каталоге, он, как и прежде, будет искать в модуле "layout.phtml" внутри "Application / modules // views / scripts".

Если макет не найден внутри модуля, он загрузит макет модуля по умолчанию.

Так просто!

Если вам нужна дополнительная работа с вашим шаблоном, вы можете добавить к нему плагин, например:

resources.layout.pluginClass = "YourLibrary_Controller_Plugin_Layout"

и делайте в нем какие-то дополнительные вещи.

...