Tabla de contenidos
- 78.1. Introducción
- 78.2. Scripts del controlador
- 78.3. Scripts de vista
- 78.4. Ayudantes de vista
- 78.4.1. Ayudantes iniciales
- 78.4.1.1. Ayudante de vista Action
- 78.4.1.2. Ayudante BaseUrl
- 78.4.1.3. Ayudante Currency
- 78.4.1.4. Ayudante Cycle
- 78.4.1.5. Ayudante Partial
- 78.4.1.6. Ayudante Placeholder
- 78.4.1.7. Ayudante Doctype
- 78.4.1.8. Ayudante de vista Gravatar
- 78.4.1.9. Ayudante HeadLink
- 78.4.1.10. Ayudante HeadMeta
- 78.4.1.11. Ayudante HeadScript
- 78.4.1.12. Ayudante HeadStyle
- 78.4.1.13. Ayudante HeadTitle
- 78.4.1.14. Ayudantes de objetos HTML
- 78.4.1.15. Ayudante InlineScript
- 78.4.1.16. Ayudante RenderToPlaceholder
- 78.4.1.17. Ayudante JSON
- 78.4.1.18. Ayudantes de navegación
- 78.4.1.19. Ayudante Translate
- 78.4.1.20. Ayudante de vista UserAgent
- 78.4.2. Rutas de ayudantes
- 78.4.3. Cómo escribir ayudantes personalizados
- 78.4.4. Registro de ayudantes concretos
- 78.5. Zend_View_Abstract
Zend_View es una clase para trabajar con la parte "vista" del
patrón modelo-vista-controlador. Es decir, existe para
ayudar a mantener el script de vista separado de los scripts del
modelo y del controlador. Proporciona un sistema de ayudantes, filtros
de salida y escapado de variables.
Zend_View es agnóstico respecto al sistema de plantillas; puede usar
PHP como lenguaje de plantillas, o crear instancias de otros
sistemas de plantillas y manipularlas dentro de su script
de vista.
Básicamente, el uso de Zend_View se produce en dos pasos principales:
1. Su script de controlador crea una instancia de
Zend_View y asigna variables a esa instancia.
2. El controlador indica a Zend_View que renderice una vista
determinada, entregando así el control al script de vista, el cual
genera la salida de la vista.
Como ejemplo sencillo, supongamos que su controlador tiene una lista de datos de libros que desea que sea renderizada por una vista. El script del controlador podría verse algo así:
// use a model to get the data for book authors and titles.
$data = array(
array(
'author' => 'Hernando de Soto',
'title' => 'The Mystery of Capitalism'
),
array(
'author' => 'Henry Hazlitt',
'title' => 'Economics in One Lesson'
),
array(
'author' => 'Milton Friedman',
'title' => 'Free to Choose'
)
);
// now assign the book data to a Zend_View instance
Zend_Loader::loadClass('Zend_View');
$view = new Zend_View();
$view->books = $data;
// and render a view script called "booklist.php"
echo $view->render('booklist.php');
Ahora necesitamos el script de vista asociado, "booklist.php".
Este es un script PHP como cualquier otro, con una excepción: se
ejecuta dentro del ámbito de la instancia de Zend_View, lo cual
significa que las referencias a $this apuntan a las propiedades y métodos de la
instancia de Zend_View. (Las variables asignadas a la
instancia por el controlador son propiedades públicas de la
instancia de Zend_View). Así, un script de vista muy básico podría
verse así:
if ($this->books): ?>
<!-- A table of some books. -->
<table>
<tr>
<th>Author</th>
<th>Title</th>
</tr>
<?php foreach ($this->books as $key => $val): ?>
<tr>
<td><?php echo $this->escape($val['author']) ?></td>
<td><?php echo $this->escape($val['title']) ?></td>
</tr>
<?php endforeach; ?>
</table>
<?php else: ?>
<p>There are no books to display.</p>
<?php endif;?>
Observe cómo usamos el método "escape()" para aplicar el escapado de salida a las variables.
Zend_View tiene varias opciones que se pueden establecer para
configurar el comportamiento de sus scripts de vista.
-
basePath: indica una ruta base a partir de la cual establecer la ruta de scripts, ayudantes y filtros. Asume una estructura de directorios de:
base/path/ helpers/ filters/ scripts/Esto puede establecerse mediante
setBasePath(),addBasePath(), o la opción basePath del constructor. encoding: indica la codificación de caracteres a usar con
htmlentities(),htmlspecialchars(), y otras operaciones. Por defecto es UTF-8. Se puede establecer mediantesetEncoding()o la opción encoding del constructor.escape: indica un callback a usar por
escape(). Se puede establecer mediantesetEscape()o la opción escape del constructor.filter: indica un filtro a usar después de renderizar un script de vista. Se puede establecer mediante
setFilter(),addFilter(), o la opción filter del constructor.strictVars: obliga a
Zend_Viewa emitir avisos y advertencias cuando se accede a variables de vista no inicializadas. Esto se puede establecer llamando astrictVars(true)o pasando la opción strictVars al constructor.
En nuestros ejemplos, hacemos uso de las etiquetas largas de PHP: <?php. También favorecemos el uso de la sintaxis alternativa para estructuras de control. Estos son atajos convenientes para usar al escribir scripts de vista, ya que hacen que las construcciones sean más concisas, mantienen las sentencias en líneas individuales, y eliminan la necesidad de buscar llaves dentro del HTML.
En versiones anteriores, a menudo recomendábamos usar etiquetas cortas (<?
y <?=), ya que hacen que los scripts de vista sean ligeramente menos verbosos.
Sin embargo, el valor predeterminado de la directiva php.ini
short_open_tag normalmente está desactivado en producción o en hosts compartidos,
lo que hace que su uso no sea demasiado portable. Si usa plantillas
XML en scripts de vista, las etiquetas cortas harán que las plantillas fallen la
validación. Finalmente, si usa etiquetas cortas cuando short_open_tag está
desactivado, los scripts de vista causarán errores o simplemente mostrarán el código
PHP de vuelta al visitante.
Si, a pesar de estas advertencias, desea usar etiquetas cortas pero están deshabilitadas, tiene dos opciones:
-
Active las etiquetas cortas en su archivo
.htaccess:php_value "short_open_tag" "on"
Esto solo será posible si tiene permitido crear y utilizar archivos
.htaccess. Esta directiva también puede añadirse a su archivohttpd.conf. -
Habilite un envoltorio de flujo (stream wrapper) opcional para convertir etiquetas cortas a etiquetas largas al vuelo:
$view->setUseStreamWrapper(true);
Esto registra
Zend_View_Streamcomo un envoltorio de flujo para scripts de vista, y garantizará que su código siga funcionando como si las etiquetas cortas estuvieran habilitadas.
![]() |
El envoltorio de flujo de vista degrada el rendimiento |
|---|---|
El uso del envoltorio de flujo degradará el rendimiento de su aplicación, aunque no se dispone de puntos de referencia reales para cuantificar el grado de degradación. Recomendamos que habilite las etiquetas cortas, convierta sus scripts para usar etiquetas completas, o disponga de una buena estrategia de caché de contenido parcial y/o de página completa. |
Normalmente, solo necesitará llamar a assign(),
render(), o a alguno de los métodos para establecer/añadir
rutas de filtros, ayudantes y scripts. Sin embargo, si desea extender
Zend_View usted mismo, o necesita acceso a parte de sus
elementos internos, existen varios accesores:
getVars()devolverá todas las variables asignadas.clearVars()eliminará todas las variables asignadas; útil cuando desea reutilizar un objeto de vista, pero desea controlar qué variables están disponibles.getScriptPath($script)obtendrá la ruta resuelta a un script de vista determinado.getScriptPaths()obtendrá todas las rutas de scripts registradas.getHelperPath($helper)obtendrá la ruta resuelta a la clase de ayudante indicada.getHelperPaths()obtendrá todas las rutas de ayudantes registradas.getFilterPath($filter)obtendrá la ruta resuelta a la clase de filtro indicada.getFilterPaths()obtendrá todas las rutas de filtros registradas.
![[Warning]](images/warning.png)