Zend_Layout
имеет свой набор конфигурационных опций. Они
могут быть установлены путем вызова соответствующих аксессоров, путем
передачи массива или объекта Zend_Config
конструктору или
методу startMvc()
, передачей массива опций методу
setOptions()
или передачей объекта Zend_Config
методу setConfig()
.
layout: используемый макет. Использует текущий инфлектор для определения пути к скрипту макета, соответствующего данному имени макета. По умолчанию используется имя 'layout', и оно соответствует скрипту 'layout.phtml'. Аксессоры -
setLayout()
иgetLayout()
.layoutPath: базовый путь к скрипту макета. Аксессоры:
setLayoutPath()
иgetLayoutPath()
.contentKey: переменная макета, используемая для содержимого по умолчанию (при использовании с компонентами MVC). Значением по умолчанию является 'content'. Аксессоры -
setContentKey()
иgetContentKey()
.mvcSuccessfulActionOnly: действует при использовании с компонентами MVC. Если действие бросает исключение, и этот флаг установлен в true, то рендеринг макета не будет произведен (это сделано для предотвращения повторного рендеринга макета при использовании плагина ErrorHandler). По умолчанию он установлен в true. Аксессоры -
setMvcSuccessfulActionOnly()
иgetMvcSuccessfulActionOnly()
.view: объект вида, используемый для рендеринга. При использовании с компонентами MVC
Zend_Layout
будет пытаться использовать объект вида, зарегистрированный в ViewRenderer, если объект вида не был передан явным образом. Аксессоры -setView()
иgetView()
.helperClass: класс помощника действия, применяемый при использовании
Zend_Layout
с компонентами MVC. По умолчанию этоZend_Layout_Controller_Action_Helper_Layout
. Аксессоры -setHelperClass()
иgetHelperClass()
.pluginClass: класс плагина фронт-контроллера, применяемый при использовании
Zend_Layout
с компонентами MVC. По умолчанию этоZend_Layout_Controller_Plugin_Layout
. Аксессоры -setPluginClass()
иgetPluginClass()
.inflector: инфлектор, используемый для определения путей к скрипту вида по имени макета, подробнее об этом читайте в документации по инфлектору
Zend_Layout
. Аксессоры -setInflector()
иgetInflector()
.
helperClass и pluginClass должны передаваться startMvc() | |
---|---|
Для того чтобы установка опций |
Следующие примеры предполагают наличие следующих массива опций и объекта конфигурации:
<?php $options = array( 'layout' => 'foo', 'layoutPath' => '/path/to/layouts', 'contentKey' => 'CONTENT', // игнорируется, если не используется MVC ); ?>
<?php /** [layout] layout = "foo" layoutPath = "/path/to/layouts" contentKey = "CONTENT" */ $config = new Zend_Config_Ini('/path/to/layout.ini', 'layout'); ?>
Пример 20.1. Передача опций конструктору или startMvc()
Как конструктор, так и статический метод startMvc()
могут принимать массив опций или объект Zend_Config
с опциями для конфигурирования экземпляра
Zend_Layout
.
Передача массива:
<?php // Использование конструктора: $layout = new Zend_Layout($options); // Использование startMvc(): $layout = Zend_Layout::startMvc($options); ?>
Использование объекта конфигурации:
<?php $config = new Zend_Config_Ini('/path/to/layout.ini', 'layout'); // Использование конструктора: $layout = new Zend_Layout($config); // Использование startMvc(): $layout = Zend_Layout::startMvc($config); ?>
Как правило, это наиболее легкий способ настройки экземпляра
Zend_Layout
.
Пример 20.2. Использование setOption() и setConfig()
Иногда нужно сконфигурировать объект Zend_Layout
после того, как он уже был инстанцирован. Методы
setOptions()
и setConfig()
позволяют
сделать это легко и быстро:
<?php // Использование массива опций: $layout->setOptions($options); // Использование объекта Zend_Config: $layout->setConfig($options); ?>
Но следует иметь в виду, что некоторые опции, такие, как
pluginClass
и helperClass
не будут
действовать, если были переданы с использованием этих методов,
их следует передавать конструктору или методу
startMvc()
.
Пример 20.3. Использование аксессоров
И наконец, вы можете конфигурировать свой экземпляр с помощью аксессоров. Все аксессоры реализуют fluent interface, это значит, что их вызовы могут следовать непосредственно друг за другом:
<?php $layout->setLayout('foo') ->setLayoutPath('/path/to/layouts') ->setContentKey('CONTENT'); ?>