application/ <--- dir de aplicaciones bootstrap.php <--- no es mi intención explicar que es esto default/ <--- modulo que se muestra de forma predeterminada controllers/ | models/ | --- no es mi intención explicar que es esto views/ | admin/ <--- modulo de administracion controllers/ models/ views/ foro/ <--- modulo del foro controllers/ models/ views/ html/ <--- directorio público, es decir el que se ve en internet index.php <--- sólo tiene library/ <--- pon aqui las librerias de Zend y las tuyas
Todo esto muy ordenado ¿no? como sea, si no les gusta, den un vistazo a Zend Controller Modular.
Ahora debo decirle al front controller donde buscar los módulos, para hacer eso modifico el archivo de bootstrap (para mi aplications/bootstrap.php) y busco:
setControllerDirectory('../application/controllers');
[...]
y lo cambio por:
addModuleDirectory('../application');
[...]
y… ¡ta-tan! eso hace la magia.
Todos los controllers que añadamos a application/default/controllers/ se usan igual que siempre. Pero por ejemplo para que
application/admin/controllers/IndexController.php funcione este archivo debe ser:
Si lo ven igual que cualquier controller presten atención a la línea 2 se crea la clase extendidad con Admin_ como inicio de nombre.
Por ultimo, para acceder a los diferente módulos supongamos que nuestro servidor es localhost y ahí tenemos instalado Zend. En general se tiene acceso del modo http://localhost/[modul]/[controller], con excepción de modulo default que ademas se tiene acceso de la forma http://localhost/[controller]. Supongo que hay que tener cuidado de no nombrar un controlador del modulo predeterminado de igual modo que algún otro módulo.
Saludos,
Paris.
[…] Paris M. Sánchez C. Algunos de mis trabajos y tutoriales « Modulos con Zend Framework […]
[…] Como según yo es un ejemplo práctico, creo que es buen momento para mostrar la estructura de directorios (por módulos): […]
Utilísimo. Voy a probarlo ahora mismo.
Justo después, agregaré tu sitio a mis favoritos.
Saludos desde Santa Cruz, Bolivia
buenisimo, una consulta como puedo hacer para que un modulo se conecte a otra base de datos?
Jamas he hecho algo como lo que me preguntas, pero yo lo resolvería de la siguiente forma: en el archivo de configuración escribiría las diferentes opciones para las diferentes bases de datos, luego escribiría un plugin que detectara en que modulo estoy y pusiera en los recursos los datos de la base de datos.
Algo del estilo de lo que hice aquí http://rmf.fciencias.unam.mx/~paris/zend/layout-por-cada-modulo-zend_controller_plugin/