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
<?php class Admin_Bootstrap extends Zend_Application_Module_Bootstrap { }
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
<?php /** * Action Helper for loading forms/models * * @uses Zend_Controller_Action_Helper_Abstract */ class Helper_Loader extends Zend_Controller_Action_Helper_Abstract { /** * @var Zend_Loader_PluginLoader */ private $_pluginLoader; /** * Constructor: initialize plugin loader * * @return void */ public function __construct() { $this->_pluginLoader = new Zend_Loader_PluginLoader(); } /** * Load a form/model with the provided options * * @param string $name * @param string $type * @param array|Zend_Config $options * @return Zend_Form */ private function _load($name, $type = 'form', $options = null) { $module = $this->getRequest()->getModuleName(); $front = $this->getFrontController(); $default = $front->getDispatcher() ->getDefaultModule(); $module = $default; } $moduleDirectory = $front->getControllerDirectory($module); $this->_pluginLoader->addPrefixPath($prefix, $directory); $formClass = $this->_pluginLoader->load($name); return new $formClass($options); } /** * Strategy pattern: call helper as broker method * * @param string $name * @param string $type * @param array|Zend_Config $options * @return Zend_Form */ public function direct($name, $type = 'form', $options = null) { return $this->_load($name, $type, $options); } }
Y en el bootstrap que está en application:
/application/Bootstrap.php
Código PHP:
Ver original
<?php class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initSession() { Zend_Session::start(); } protected function _initHelper() { Zend_Controller_Action_HelperBroker::addPrefix('Helper'); } }
La forma como lo llamo en el controlador:
Código PHP:
Ver original
$this->_helper->loader('upload', 'model'); // Retorna algo como Admin_Model_Upload // o $this->_helper->loader('fomulario', 'form'); // Retorna algo como Admin_Form_Formulario
¡¡¡Muchas gracias!!!