Foros del Web » Programando para Internet » PHP » Zend »

Sistema modular en Zend

Estas en el tema de Sistema modular en Zend en el foro de Zend en Foros del Web. Buenas compañeros, les cuento que estoy empezando a ver un poco de Zend, ya que cuento con tiempo libre que no lo tenia hace mucho ...
  #1 (permalink)  
Antiguo 12/12/2010, 06:54
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 19 años, 1 mes
Puntos: 890
Sistema modular en Zend

Buenas compañeros, les cuento que estoy empezando a ver un poco de Zend, ya que cuento con tiempo libre que no lo tenia hace mucho :)

Y bueno retomo a mis clases de Zend. Estoy tratando de entender - en realidad ya lo tengo entendido - y es el sistema modular en Zend.

Ya tengo mi configuración de esta manera la cual me carga el modulo por defecto "default"
Código PHP:
Ver original
  1. [production]
  2. phpSettings.display_startup_errors = 1
  3. phpSettings.display_errors = 1
  4. includePaths.library = APPLICATION_PATH "/../library"
  5. bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
  6. bootstrap.class = "Bootstrap"
  7. appnamespace = "Application"
  8. resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
  9.  
  10. resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
  11. resources.frontController.modulecontrollerDirectoryName = APPLICATION_PATH "/controllers"
  12. resources.frontController.defaultModule = "default"
  13. resources.frontController.defaultControllerName = "index"
  14. resources.frontController.defaultAction = "index"
  15. ;defaultModule.frontController.defaultAction = "index"
  16.  
  17. resources.frontController.params.displayExceptions = 1
  18.  
  19.  
  20.  resources.modules =

Bien la teoria dice que debo crear otra carpeta modular dentro de application en mi caso tengo post

application
------configs
------default
----------controllers
----------views
------post
----------configs
----------controllers
----------views
----------bootstrap.php <<<< es necesario?
bootstrap.php

El modulo default me lo toma de manera correcta, pero mas no el modulo post, debo tener en cada modulo un bootstrap? segun el error que me da es que no me permite redeclarar la clase bootstrap sin embargo he visto an algunos tutoriales que lo tienen, pero en la doc oficial(al menos en la estructura ), pero si lo quito tampoco me funciona. Y me da el error que el post controller no existe(obviamente por que piensa que es un controlador)

Supongo que el error esta en el config.ini pero no he encontrado nada de como declarar mis modulos.

Código PHP:
Ver original
  1. Cannot redeclare class Bootstrap in /opt/lampp/htdocs/webs/zfproject/blog/application/modules/post/Bootstrap.php on line 13


Alguien que tenga un tutorial o algun link donde seguir :) dado que la documentación la verdad no es muy completa o al menos no he sabido encontrar ¬¬

Segun entiendo en cada moculo debemos tener tambien un application.ini pero no se que poner en el :(

saludos
__________________
Drupal Argentina

Última edición por NUCKLEAR; 12/12/2010 a las 07:00
  #2 (permalink)  
Antiguo 12/12/2010, 07:12
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 19 años, 1 mes
Puntos: 890
Respuesta: Sistema modular en Zend

XD ya lo solucione, era un error de convención(como siempre dije la solucion esta siempre frente a tus narices pero es lo ultimo en encontrarse o deja de buscar y lo vas a encontrar)

Es que en el controlador debemos tener el prefix del modulo en mi caso ya que default lo toma por defecto no es necesario. por si a alguien mas le sirve:

Código PHP:
Ver original
  1. class Post_IndexController extends Zend_Controller_Action

Saludos.
__________________
Drupal Argentina
  #3 (permalink)  
Antiguo 12/12/2010, 09:03
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Sistema modular en Zend

Que tal NUCKLEAR, si bien has resuelto tu problema, te respondo a la pregunta del Bootstrap, no es obligatorio tener uno por modulo, pero recuerda que de no hacerlo deberas inicializar de forma manual los resources,
tambien ten en cuenta que todos los _init de todos los Bootstrap's se ejecutaran en cada request, por eso si tienes algun proceso pesado o lento seria mejor colocarlo en un plugin .

Nota: los Bootstrap's deben extender de Zend_Application_Module_Bootstrap.

Y con respecto a lo del application.ini, es lo mismo, puedes o no tener config personalizada para cada modulo, no es algo obligatorio, dependera de tu proyecto.

Salu2.

Última edición por masterpuppet; 12/12/2010 a las 11:10
  #4 (permalink)  
Antiguo 12/12/2010, 12:40
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 19 años, 1 mes
Puntos: 890
Respuesta: Sistema modular en Zend

Hola mi metallico amigo, si es lo que descubrí leyendo los docs, se esta poniendo interesante el asunto. :D Es mas que seguro que me van a tener de alumno esta vez. ;)
__________________
Drupal Argentina
  #5 (permalink)  
Antiguo 14/12/2010, 14:08
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 19 años, 1 mes
Puntos: 890
Respuesta: Sistema modular en Zend

Bueno retorno nuevamente, despues de leerme mucha doc respecto al sistema modular(y habiendo hecho un CRUD bsatante interesante pero sin modulos) Ahore me surge un problema y no se ni por donde mirar.

Como ·$%& llamo a mi model desde mi modulo.... Encuentro que hay docenas de maneras pero por alguna razon ninguna me funciona. Simplemente al hacer Loader de mi modelo me dice que no encuentra el archivo. en mi caso:

Lo que mas se ha acercado aunque sea a darme un error es llamando al modelo desde mi controller cargando la clase

Código PHP:
Ver original
  1. public function init()
  2.     {
  3.         /* Initialize action controller here */
  4.       Zend_Loader::loadClass('Post');
  5.  
  6.     }

Teniendo en cuenta que tengo dentro de modules/post/models/Post.php
en mi bootstrap del modulo tengo esto:

Código PHP:
Ver original
  1. <?php
  2.  
  3. class Post_Bootstrap extends Zend_Application_Module_Bootstrap{
  4.  
  5. protected function _initAutoload(){
  6.  
  7.   $modelLoader = new Zend_Application_Module_Autoloader(array(
  8.  
  9.   'namespace' => '',
  10.   'basePath' => APPLICATION_PATH . '/modules/post'
  11.  
  12.   ));
  13.  
  14.    return $modelLoader;
  15. }
  16.  
  17. }

Me lei toda la docu de la clase Zend_Application_Module_Autoloader pero no doy pero no doy con el error. La teoria me dice que esta correcta. Es lo que pienso.

Warning: include_once(Post.php) [function.include-once]: failed to open stream....blah blah--

mi application.ini esta igual, trabaja de manera correcta los modulos los action y los views, solo no logro cargar ningun model relacionado al modulo. :(

PD: Ahora se por que los novatos le huyen a esto :P
__________________
Drupal Argentina
  #6 (permalink)  
Antiguo 14/12/2010, 14:23
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Sistema modular en Zend

Que tal NUCKLEAR, bienvenido al sufrimiento , te comento que no precisas el _initAutoload, el Bootstrap del modulo se encarga de eso justamente, y acuerdate que el nombre del modelo debe ser Module_Model_Class, en tu caso Post_Model_Post, y despues para utilizarlo:

Código PHP:
Ver original
  1. ....
  2. protected $_model;
  3.  
  4. public function init()
  5. {
  6.     $this->_model = new Post_Model_Post();
  7. }
  8. ...

Salu2.
  #7 (permalink)  
Antiguo 14/12/2010, 14:57
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 19 años, 1 mes
Puntos: 890
Respuesta: Sistema modular en Zend

Hola masterpuppet pues si tenias razón con respecto al nombre de la clase (Post_Model_Post). algo que descubrí es que me hace un autoload si necesitad de instanciarla, me funciona igual así:

Código PHP:
Ver original
  1. <?php
  2.  
  3. class Post_IndexController extends Zend_Controller_Action
  4. {
  5.  // protected $_model;
  6.  
  7.     public function init()
  8.     {
  9.   /* Initialize action controller here */
  10.   // Zend_Loader::loadClass('Post');
  11.   // include_once(APPLICATION_PATH . '/modules/post/models/Post.php');
  12.  
  13.   // $this->_model = new Post_Model_Post();
  14.  
  15.  
  16.     }
  17.  
  18.     public function indexAction()
  19.     {
  20.         // action body
  21.     }
  22.  
  23.     public function listarAction(){
  24.      
  25.       $posts = new Post_Model_Post();
  26.       $this->view->posts = $posts->fetchAll();
  27.      
  28.  
  29.         }
  30.  
  31. }

Pasa algo, o esta ok y debe ser asi?

Saludos y gracias de nuevo, la verdad por mas que me leí, no encontré esa nomenclatura de llamar a la clase así.
__________________
Drupal Argentina
  #8 (permalink)  
Antiguo 14/12/2010, 15:25
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Sistema modular en Zend

Al crear el Bootstrap(Post_Bootstrap) del modulo ya estas inicializando el autoloader, te invito a navegar un poco en Zend, mira dentro de Zend_Application_Module_Autoloader vas a encontrar la lista de resources .
Así como lo tienes es como funciona, igualmente te sugiero que investigues sobre Service Layer.
Por ultimo sobre la nomenclatura creo que en el QuickStart esta mencionado pero puedo estar equivocado.

Salu2.

Etiquetas: modular
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:32.