Ver Mensaje Individual
  #1 (permalink)  
Antiguo 18/02/2011, 11:26
Avatar de abimaelrc
abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Clases en los modelos y Zend_Controller_Action_HelperBroker

Saludos corillo,

Estaba experimentando con el Zend_Controller_Action_HelperBroker y me resulto el ejemplo que tomé de http://devzone.zend.com/article/3350.

Ahora, en el módulo Admin cree una clase en el directorio de models llamado Admin_Model_Upload. Esto lo llamaba así en el controlador y no tenía problemas. Pero desde que introduje el ejemplo que trae ese árticulo, me dejó de funcionar. Entonces lo que hice fue una modificación al código que propone ese artículo para cargar los modelos por de ese módulo de Admin. Ahora me volvió a funcionar usando el Helper. Mi pregunta es ¿hay que hacer alguna modificación a algún archivo para que me reconozca la ruta Admin_Model_Upload?

Tengo declarado el Bootstrap en el módulo de Admin con el siguiente código:
/application/modules/Admin/Bootstrap.php
Código PHP:
Ver original
  1. <?php
  2. class Admin_Bootstrap extends Zend_Application_Module_Bootstrap
  3. {
  4.  
  5. }

El código que uso ahora en el helper, para cargar los modelos que hay en el módulo de Admin es:
/library/Helper/Loader.php
Código PHP:
Ver original
  1. <?php
  2. /**
  3.  * Action Helper for loading forms/models
  4.  *
  5.  * @uses Zend_Controller_Action_Helper_Abstract
  6.  */
  7. class Helper_Loader extends Zend_Controller_Action_Helper_Abstract
  8. {
  9.     /**
  10.      * @var Zend_Loader_PluginLoader
  11.      */
  12.     private $_pluginLoader;
  13.  
  14.     /**
  15.      * Constructor: initialize plugin loader
  16.      *
  17.      * @return void
  18.      */
  19.     public function __construct()
  20.     {
  21.         $this->_pluginLoader = new Zend_Loader_PluginLoader();
  22.     }
  23.  
  24.     /**
  25.      * Load a form/model with the provided options
  26.      *
  27.      * @param string $name
  28.      * @param string $type
  29.      * @param array|Zend_Config $options
  30.      * @return Zend_Form
  31.      */
  32.     private function _load($name, $type = 'form', $options = null)
  33.     {
  34.         $module  = $this->getRequest()->getModuleName();
  35.         $front   = $this->getFrontController();
  36.         $default = $front->getDispatcher()
  37.                          ->getDefaultModule();
  38.         if (empty($module)) {
  39.             $module = $default;
  40.         }
  41.         $moduleDirectory = $front->getControllerDirectory($module);
  42.         $directory  = dirname($moduleDirectory) . '/' . strtolower((string) $type) . 's';
  43.  
  44.         $prefix = (('default' == $module) ? '' : ucfirst($module) . '_')
  45.                 . ucfirst((string) $type) . '_';
  46.         $this->_pluginLoader->addPrefixPath($prefix, $directory);
  47.  
  48.         $name      = ucfirst((string) $name);
  49.         $formClass = $this->_pluginLoader->load($name);
  50.         return new $formClass($options);
  51.     }
  52.  
  53.     /**
  54.      * Strategy pattern: call helper as broker method
  55.      *
  56.      * @param  string $name
  57.      * @param  string $type
  58.      * @param  array|Zend_Config $options
  59.      * @return Zend_Form
  60.      */
  61.     public function direct($name, $type = 'form', $options = null)
  62.     {
  63.         return $this->_load($name, $type, $options);
  64.     }
  65. }

Y en el bootstrap que está en application:
/application/Bootstrap.php
Código PHP:
Ver original
  1. <?php
  2. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
  3. {
  4.     protected function _initSession()
  5.     {
  6.         Zend_Session::start();
  7.     }
  8.  
  9.     protected function _initHelper()
  10.     {
  11.         Zend_Controller_Action_HelperBroker::addPrefix('Helper');
  12.     }
  13. }

La forma como lo llamo en el controlador:
Código PHP:
Ver original
  1. $this->_helper->loader('upload', 'model'); // Retorna algo como Admin_Model_Upload
  2. // o
  3. $this->_helper->loader('fomulario', 'form'); // Retorna algo como Admin_Form_Formulario

¡¡¡Muchas gracias!!!
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 18/02/2011 a las 11:31