invokables - Aplicación modular Zend Framework, no se pueden cargar modelos para cada módulo, modelos de carga automática?
zend orm (5)
Debe registrar el espacio de nombres ''Contacts_'' con el autocargador. Puedes usar Zend_Application_Module_Autoloader para esto.
$autoloader = new Zend_Application_Module_Autoloader(array(
''namespace'' => ''Contacts_'',
''basePath'' => dirname(__FILE__) . ''/modules/cotacts'',
));
Esto creará las siguientes asignaciones para su módulo dentro de basePath que proporcione.
api/ => Api
forms/ => Form
models/ => Model
DbTable/ => Model_DbTable
plugins/ => Plugin
Si está utilizando Zend_Application para iniciar su aplicación y sus módulos, no debería necesitar esto porque los documentos dicen que:
Al usar bootstraps de módulo con Zend_Application, se creará una instancia de Zend_Application_Module_Autoloader por defecto para cada módulo discreto, lo que le permite cargar automáticamente los recursos del módulo.
¿Hay alguna forma de tener modelos para cada módulo? Tengo 3 módulos, uno es un módulo de "contactos". Creé un modelo para él en modules / contacts / models / Codes.php Codes Controller
class Contacts_CodesController extends Zend_Controller_Action
{
public function init()
{
/* Initialize action controller here */
$this->view->messages = $this->_helper->flashMessenger->getMessages();
}
public function indexAction()
{
$codesTable = new Contacts_Model_Codes();
}
Modelo de Códigos:
class Contacts_Model_Codes extends Zend_Db_Table
{
protected $_name = ''codes'';
}
El error que recibo es: Error fatal: no se encontró la clase "Contacts_Model_Codes" en /Applications/MAMP/htdocs/zf_site/application/modules/contacts/controllers/CodesController.php en la línea 26
Gracias
Estoy usando la versión 1.9. Esto es parte de mi bootstrap:
protected function _initAutoload() {
$modelLoader = new Zend_Application_Module_Autoloader(array(
''namespace'' => '''',
''basePath'' => APPLICATION_PATH.''/modules/default'')
);
}
protected function _initAutoloaders()
{
$this->getApplication()->setAutoloaderNamespaces(array(''Eric_''));
return $this;
}
protected function _initPlugins()
{
$this->bootstrap(''autoloaders'');
$this->bootstrap(''frontController'');
// register the plugin for setting layouts per module
$plugin = new Eric_Plugin_Modularlayout();
$this->frontController->registerPlugin($plugin);
return $modelLoader;
}
El complemento Eric_Plugin_Modularlayout establece el diseño correcto para cada módulo.
Tengo 3 módulos: predeterminado, ez, contactos. Lo curioso es que, en una acción de contactos, puedo llamar a los modelos en el directorio ez / models. sin problema.
Encontré el problema. Olvidé poner un archivo bootstrap con mi módulo de contactos. Ahora todo funciona y puedo hacer que mis módulos usen sus propios modelos.
class Contacts_Bootstrap extends Zend_Application_Module_Bootstrap
{
}
añadir
resources.modules[] =
Para su configuración ini
¡He encontrado la solución, supongo! :) Es un problema cuando agrega el siguiente recurso en el archivo application.ini
resources.frontController.defaultModule = "Default"
y también usas algún tipo de parámetros. Creo que es un error.
La forma correcta de implementar Módulos es:
1 - Crea tus módulos deseados y el Módulo '' Default '' con la herramienta zf
2 - En apllication.ini, indique a ZF dónde están los módulos y dónde están los controladores de esos módulos, con
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.frontController.moduleControllerDirectoryName = "controllers"
Use lo conocido
resources.modules = ""
Y establecer:
resources.frontController.params.prefixDefaultModule = ""
Es importante porque la herramienta zf lo establece en "1". Aquí está el error. :)
¡Y recuerda NO PONER LO QUE ES EL MÓDULO POR DEFECTO!
3 - Crea el archivo bootstrap para cada módulo y pon:
Si mi módulo es ''Evacol'':
<?php
class Evacol_Bootstrap extends Zend_Application_Module_Bootstrap
{
}
Guárdelo en / modules / Evacol / obviamente
Tome nota de Evacol_ ... y ..._ Module_Bootstr ... EL NOMBRE DE MI MÓDULO QUE EXTIENDE LA CLASE CORRECTA. No use el valor predeterminado del archivo bootstrap creado con la herramienta zf. Lo hice :)
NO MODIFIQUE NADA MÁS. NO ES NECESARIO.
¡Y voilá! Créeme. ¡Funciona!
Era Zend Framework 1.10.8