Zend_Layout tiene una serie de casos de uso para el desarrollador
avanzado que desee adaptarlo a diferentes implementaciones de vista,
estructuras de sistema de archivos, y más.
Los principales puntos de extensión son:
Objetos de vista personalizados.
Zend_Layoutle permite utilizar cualquier clase que implementeZend_View_Interface.Plugins de controlador frontal personalizados.
Zend_Layoutincluye un plugin de controlador frontal estándar que automatiza la renderización de los layouts antes de devolver la respuesta. Puede sustituirlo por su propio plugin.Helpers de acción personalizados.
Zend_Layoutincluye un helper de acción estándar que debería ser adecuado para la mayoría de las necesidades, ya que es un simple proxy hacia el propio objeto layout.Resolución de ruta de script de layout personalizada.
Zend_Layoutle permite usar su propio inflector para la resolución de la ruta del script de layout, o simplemente modificar el inflector asociado para especificar sus propias reglas de inflexión.
Zend_Layout le permite usar cualquier clase que implemente
Zend_View_Interface o que extienda
Zend_View_Abstract para renderizar su script de layout.
Simplemente pase su objeto de vista personalizado como parámetro al
constructor/startMvc(), o establézcalo usando el
accesor setView():
$view = new My_Custom_View(); $layout->setView($view);
![]() |
No todas las implementaciones de Zend_View son iguales |
|---|---|
|
Aunque
Si necesita usar una implementación de Alternativamente, si su implementación de vista admite algún tipo de capacidad de plugin, puede acceder a las variables mediante el placeholder 'Zend_Layout', usando el helper placeholder:
$placeholders = new Zend_View_Helper_Placeholder();
$layoutVars = $placeholders->placeholder('Zend_Layout')->getArrayCopy();
|
Cuando se usa con los componentes MVC, Zend_Layout
registra un plugin de controlador frontal que renderiza el layout como la
última acción antes de salir del bucle de despacho. En la mayoría de los casos, el
plugin por defecto será adecuado, pero si desea escribir
el suyo propio, puede especificar el nombre de la clase de plugin a cargar
pasando la opción pluginClass al
método startMvc().
Cualquier clase de plugin que escriba para este fin necesitará extender
Zend_Controller_Plugin_Abstract, y debería aceptar una
instancia del objeto layout como argumento del constructor. Por lo demás,
los detalles de su implementación dependen de usted.
La clase de plugin por defecto utilizada es
Zend_Layout_Controller_Plugin_Layout.
Cuando se usa con los componentes MVC, Zend_Layout
registra un helper de controlador de acción en el broker de helpers. El
helper por defecto,
Zend_Layout_Controller_Action_Helper_Layout, actúa como un
simple proxy hacia la propia instancia del objeto layout, y debería ser
adecuado para la mayoría de los casos de uso.
Si siente la necesidad de escribir funcionalidad personalizada, simplemente escriba
una clase de helper de acción que extienda
Zend_Controller_Action_Helper_Abstract y pase el
nombre de la clase como la opción helperClass al
método startMvc(). Los detalles de la implementación quedan
a su cargo.
Zend_Layout utiliza Zend_Filter_Inflector para
establecer una cadena de filtros para traducir un nombre de layout a una ruta
de script de layout. Por defecto, utiliza las reglas 'Word_CamelCaseToDash'
seguida de 'StringToLower', y el sufijo 'phtml' para transformar el
nombre en una ruta. Como algunos ejemplos:
'foo' se transformará en 'foo.phtml'.
'FooBarBaz' se transformará en 'foo-bar-baz.phtml'.
Tiene tres opciones para modificar la inflexión: modificar el
destino de inflexión y/o el sufijo de vista mediante los accesores de Zend_Layout,
modificar las reglas del inflector y el destino del inflector
asociado a la instancia de Zend_Layout, o crear
su propia instancia de inflector y pasarla a
Zend_Layout::setInflector().
Ejemplo 40.4. Uso de los accesores de Zend_Layout para modificar el inflector
El inflector por defecto de Zend_Layout utiliza referencias
estáticas para el destino y el sufijo del script de vista, y
dispone de accesores para establecer estos valores.
// Establecer el destino del inflector:
$layout->setInflectorTarget('layouts/:script.:suffix');
// Establecer el sufijo del script de vista de layout:
$layout->setViewSuffix('php');
Ejemplo 40.5. Modificación directa del inflector de Zend_Layout
Los inflectores tienen un destino y una o más reglas. El destino
por defecto utilizado con Zend_Layout es ':script.:suffix';
a ':script' se le pasa el nombre de layout registrado, mientras que ':suffix'
es una regla estática del inflector.
Supongamos que quiere que el script de layout termine con el sufijo 'html', y que quiere separar las palabras en MixedCase y camelCase con guiones bajos en lugar de guiones, y no convertir el nombre a minúsculas. Además, quiere que busque el script en un subdirectorio 'layouts'.
$layout->getInflector()->setTarget('layouts/:script.:suffix')
->setStaticRule('suffix', 'html')
->setFilterRule(array('Word_CamelCaseToUnderscore'));
Ejemplo 40.6. Inflectores personalizados
En la mayoría de los casos, modificar el inflector existente será suficiente.
Sin embargo, puede que tenga un inflector que desee utilizar en varios
lugares, con objetos diferentes de distintos tipos.
Zend_Layout lo permite.
$inflector = new Zend_Filter_Inflector('layouts/:script.:suffix');
$inflector->addRules(array(
':script' => array('Word_CamelCaseToUnderscore'),
'suffix' => 'html'
));
$layout->setInflector($inflector);
![]() |
La inflexión puede desactivarse |
|---|---|
La inflexión puede desactivarse y activarse mediante accesores en el
objeto |
![[Note]](images/note.png)