lunes, 30 de abril de 2012

Configuración Application.ini

Via Zend Framework in Action encontré una colección de las opciones de configuración que application.ini puede tener. considero esta información importante para no dejarla pasar.



Application Ini Zend Framework

lunes, 16 de abril de 2012

Vistas (views)


El script de vista constituyen el código HTML que muestra la información al usuario o cliente de nuestra aplicación separando la lógica del negocio, estos archivos son también llamados templates o plantillas que facilitan la visualización de la información como resultado de la interacción del controlador y el modelo. Cuando este resultado es generado (render), se asigna automáticamente el script de vista .phtml correspondiente según el nombre del “Action”, a no ser que en forma manual (render(‘archivo.phtml’)) se indique otro script vista.

El script de vista por defecto tienen extensión .phtml indicando básicamente que este archivo contiene código XHTML junto con algún javascript, CSS o PHP que permita interactuar al usuario con la aplicación, (Embeber código PHP)este sufijo se puede cambiar por criterios propios mediante un Action Helper dentro de un controller

$this->_helper->viewRenderer->setViewSuffix('html');

La ubicación de las vistas por defecto es views/scripts


Mediante la gráfica se determina que cada controlador tiene asociado en la ruta VIEWS/SCRIPT una carpeta con el mismo nombre del controlador y en su interior, script de vistas por cada “action” que desee ser mostrado.

Por defecto cada ACTION del CONTROLLER hará un render o buscará un VIEW SCRIPT con el mismo nombre del ACTION para mostrar la información. Este proceso automático lo hace el action helper ViewRenderer (activo por defecto). Éste puede ser desactivado para que el action no haga render o visualice información alguna.

public function verAction()
{

// Desactiva el render de la acción

$this->_helper->viewRenderer->setNoRender();

}


En ZF los templates o plantillas .phtml son parte del ámbito del objeto Zed_View motivo por el cual las propiedades y metodos son accesibles usando $this , en el caso de asignar valores a las propiedades dentro de un controller lo hariamos asi:


$this->view->nombre = “Carlos”; y en la vista la podemos llamar $this->escape($this->nombre);

En el caso de pasar varios valores podemos utilizar el metodo assign() de la siguiente forma

$cantantes = array("joe","celia","frank","Nino");

$this->view->assign('cantantes',$cantantes);

Y en la vista



<table border="1">
<tr>
<th>No.</th>
<th>Nombre</th>
</tr>
<?php foreach ($this->cantantes as $key => $val): ?>
<tr>
<td><?php echo $this->escape($key) ?></td>
<td><?php echo $this->escape($val) ?></td>
</tr>
<?php endforeach; ?>
</table>



En las vistas se recomienda la utilización del metodo escape() que nos permite asegurar la salida de código HTML evitando que el sitio o aplicación sufra ataques Cross-Site Scripting (XSS), este método funciona de la siguiente manera

En el controller tenemos

$this->view->nombre ='Carlos Fernando Benítez & >>< "" ';

Y En la vista

echo $this->escape($this->nombre);

El resultad en el navegador es:


Carlos Fernando Benítez & >>< ""

Si miramos el código fuente de la pagina  podemos apreciar que la función escape() por defecto usa la función htmlspecialchars() cambiando a entidades html los códigos de los caracteres enviados 



Inicializar el OBJETO VIEW


Si las asignaciones de variables para ser utilizadas o visualizadas en las vistas se realizan dentro del controller, sólo es necesario utilizar $this->view->nombreVariable = “valor”, debido a que el objeto View ha sido instanciado desde la clase Zend/Controller/Action en el método initView(). Cuando se necesita desde el comienzo de la aplicación, como es el caso de los view helpers debemos crear un método _init en el Bootstrap.php para poder recuperar la instancia de Zend_View.

protected function _initViewSet()
{
$this->bootstrap('view');
$view = $this->getResource('view');
$view->doctype('XHTML1_STRICT');
}


$this->bootstrap->(‘view’) es un método final perteneciente a la clase Zend/Application/Bootstrap/BootstrapAbstract.php


final public function bootstrap($resource = null)
{
$this->_bootstrap($resource);
return $this;
}


Que creará un contenedor de recursos que pueden ser recuperados mediante


$view = $this->getResource('view');


El recurso debe hacer sido declarado antes, en el caso de “view”, dentro del archivo application.ini debe contener resources.view[] =


Si nuestro application.ini no cuenta con las líneas de inicialización de los recursos deberíamos entonces crear la nueva instancia de la clase



protected function _initView() 
  { 
        $view = new Zend_View(); 
        $view->doctype('XHTML1_STRICT'); 
        $view->headMeta()->appendHttpEquiv('Content-Type', 'text/html; charset=UTF-8'); 
        $view->headTitle('Software de Control') 
             ->setSeparator(' :: '); 
        $view->departamento = "Simón Bolivar"; 
  }


Tener especial cuidado con los nombre de los métodos utilizados en el Bootstrap y los nombre de los plugins de recursos utilizados en application.ini. esto puede provocar conflictos y presentan el siguiente mensaje de error


Fatal error: Uncaught exception 'Zend_Application_Bootstrap_Exception' with message 'Circular resource dependency detected' in C:\Zend\library\Zend\Application\Bootstrap\BootstrapAbstract.php:660 Stack trace: #0


Por ejemplo si en el application.ini tenemos el plugin de recurso VIEW

resources.view[] =

y en el Bootstrap.php tenemos el método

protected function _initView()
{
$this->bootstrap('view');
$view = $this->getResource('view');
$view->doctype('XHTML1_STRICT');
$view->headMeta()->appendHttpEquiv('Content-Type', 'text/html; charset=UTF-8');
$view->headTitle('Software de Control ')
->setSeparator(' :: ');
$view->institucion = " Simón Bolivar";
}

Zend_Application interpreta que se crearán dos objetos donde solo es necesario uno, esto provocará el mensaje de "Circular resource dependency detected"