lunes, 26 de marzo de 2012

Action Helpers

Para ZF los Action Helpers son clases que permitirán ser ejecutadas por cualquier Controlador mejorando sustancialmente la funcionalidad de los “Action Controllers” o cambiando su comportamiento bajo demanda, de tal forma que independiza ciertas tareas, permite reusar y hacer el código mucho más limpio. Tiene la ventaja además de ser utilizados en tiempo de ejecución, si se necesitan se utilizan pero no se cargan por defecto. Zend Framework tiene algunos Action Helpers diseñados que pueden ser ejecutados directamente dentro de los “Action”, en la lista se encuentran: Url, ViewRenderer, Redirector, FlashMessenger, ContextSwitch, Cache,AjaxContext, AutoCompleteDojo,  AutoCompleteScriptaculous, Json  y ActionStack , ZF ofrece además la posibilidad de crear nuestros propios Action Helpers. 


Crear nuestros Action Helpers 


Los Action  Helpers son clases que se extienden de Zend_Controller_Action_Helper_Abstract y siguiendo la convención de nombres, la ubicación física de los action que vienen por defecto es LIBRERÍA/ZEND/CONTROLLER/ACTION/HELPER, ahora bien, para adicionar código personalizado o propio se sugiere hacerlo bajo la carpeta LIBRARY, nuestros Action Helpers los podemos guardar en LIBRARY/COD/HELPERS
COD = Carpeta de Código Propio (El nombre es indiferente por ejemplo: MY o LIB)



Cómo llamar un Action Helper


La clase que esta encargada de administrar los Action Helpers es  Zend_Controller_Action_HelperBroker , mediante sus métodos getHelper, addHelper, addPath, addPrefix, resetHelpers,  podrá obtener un helper por nombre, adicionar helper, adicionar la ruta de ubicación, adicionar helpers por prefijo y hacer un reset al stack respectivamente. Esta clase permite cargar por demanda cualquier Action Helper, esto debido a que se comporta como una fábrica de helper registrados de forma estática. 

Esta clase es requerida por Zend_Controller_Action y una de sus propiedades es:


protected $_helper = null;


La cual guarda una instancia de su clase


public function __construct(Zend_Controller_Request_Abstract $request, Zend_Controller_Response_Abstract $response, array $invokeArgs = array())
    {
        $this->setRequest($request)
             ->setResponse($response)
             ->_setInvokeArgs($invokeArgs);
        $this->_helper = new Zend_Controller_Action_HelperBroker($this);
        $this->init();
    }


Para llamar a un Action Helper dentro de un Controller debemos utilizar el helperbroker así: 
$this->_helper->nombreActionHelper();




Cómo registrarlos y ejecutarlos


Utilizando addPrefix() la clase prefijo sirve para determinar la ruta donde están ubicados los Action Helpers, este prefijo debe regirse por la convenciones de nombre de clases utilizadas por ZF.


Para ser ejecutados dentro de los "Action" de  los controladores se debe primero indicar donde se encuentran físicamente para esto inicializaremos en el Bootstrap un metodo _init o adicionamos una nueva linea en application.ini


class Cod_Helpers_Ayudas extends Zend_Controller_Action_Helper_Abstract {

 public function direct( )
 {
    
    
 }


class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
 protected function _initHelper()
  {
     Zend_Controller_Action_HelperBroker::addPrefix('Cod_Helpers');
 }
}


Una alternativa para el bootstrap es inicializar en el application.ini 
[production]
resources.frontController.actionHelperPaths.HELPER_Prefix ="My/Helper/Path" 



Podemos también llamar a otros Action Helper ubicados físicamente en otra ruta, para hacer estos utilizamos:
Zend_Controller_Action_HelperBroker::addPath(
        APPLICATION_PATH .'/controllers/helpers');