zf2 zend invokables framework zend-framework model module

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