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

Módulos dentro de módulos?

Estas en el tema de Módulos dentro de módulos? en el foro de Zend en Foros del Web. Hola de nuevo, Con la aplicación estructurada con módulos, se puede hacer para tener módulos dentro de un módulo? Y que se pueda llamar así: ...
  #1 (permalink)  
Antiguo 08/08/2011, 13:09
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años, 7 meses
Puntos: 261
Módulos dentro de módulos?

Hola de nuevo,

Con la aplicación estructurada con módulos, se puede hacer para tener módulos dentro de un módulo?

Y que se pueda llamar así:
Código:
www.sitio.com/{¿grupo_de_modulos?}/{modulo}/{controler}/{action}
Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #2 (permalink)  
Antiguo 08/08/2011, 13: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: Módulos dentro de módulos?

Como poder, se puede, ahora, te lo tenes que currar todo vos :P, Zend por defecto no tiene soporte para tal estructura.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 08/08/2011, 14:04
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Módulos dentro de módulos?

Exacto, tendrías que crear un nuevo route, y me imagino también extender el dispacher (Zend_Controller_Dispatcher_Abstract o Zend_Controller_Dispatcher_Standard) para que pueda reconocer los grupos de modulos.

Saludos.
  #4 (permalink)  
Antiguo 08/08/2011, 14:19
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años, 7 meses
Puntos: 261
Respuesta: Módulos dentro de módulos?

Por ahora creo que se me escapa bastante de mis conocimientos.

Seguiré buscando a ver si encuentro algún articulo que trate el tema.

Gracias por las aclaraciones

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #5 (permalink)  
Antiguo 11/08/2011, 14:07
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años, 7 meses
Puntos: 261
Respuesta: Módulos dentro de módulos?

Sigo dandole vueltas al tema. Y estaba haciendo algunas pruebas. A ver que opinan y si esposible hacerlo de esta forma.

Ya he conseguido mediante la configuración del resource.router y el Bootstrap, que tenga la url como ponía al principio del post.Quedando así.
Código:
www.sitio.com/{modules}/{subModulos}/{controler}/{action}
He duplicado la carpeta que contiene los módulos.
Desde el application.ini cambiando:
Código:
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules1"
por esto:
Código:
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules2"
Logicamente consigo que la aplicación cargue los módulos del otro directorio con todas las funcionalidades, plugins, views y demás.

Ahora bien, pregunto. Desde el Botstrap se podría determinar, el parámetro que tiene {modules} y basandose en dicho parametro, cambiar el 'resources.frontController.moduleDirectory' para que apunte al directorio correspondiente?

Y la otra pregunta, es seguro hacerlo de esta forma, o podría tener problemas de algún tipo?

Ya que Zend no soporta este tipo de estructura, pensé en que se puede mantener la estructura que contempla Zend, pero solo cambiando la ruta que apunta a la carpeta principal de módulos para acceder a ellos.

A ver que les parece y si es viable hacerlo de esta forma.

Un saludo,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #6 (permalink)  
Antiguo 11/08/2011, 14:38
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Módulos dentro de módulos?

Desde el Bootstrap no podrías hacerlo, pero desde un plugin, es probable que sí, aunque es mejor hacer un subclass del dispatcher para eso, ya que es al dispatcher quien le informa al frontController sobre la acción a ejecutar.

Saludos.
  #7 (permalink)  
Antiguo 11/08/2011, 14:50
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años, 7 meses
Puntos: 261
Respuesta: Módulos dentro de módulos?

Para esto si me hace falta algo de ayuda...

Todo se haría en este archivo?

Tengo que extender como un plugin el Zend_Controller_Dispatcher_Standard.

Y en este es donde tomo la url y verifico si corresponde a un grupo de módulos o a otro.

Y despues como hago para cambiar el 'resources.frontController.moduleDirectory'. Tambien desde este archivo?

Gracias de antemano,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #8 (permalink)  
Antiguo 11/08/2011, 16:33
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Módulos dentro de módulos?

No lo he probado pero podrías hacer algo así:
Un dispatcher (library/My/Dispatcher/Custom.php):
Código PHP:
Ver original
  1. <?php
  2. class My_Dispatcher_Custom extends Zend_Controller_Dispatcher_Standard
  3. {
  4.     public function resetControllerDirectory()
  5.     {
  6.         $this->_controllerDirectory = array();
  7.     }
  8. }

Bootstrap:
Código PHP:
Ver original
  1. <?php
  2.  
  3. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
  4. {
  5.     public function _initPlugin()
  6.     {
  7.         $this->bootstrap('frontController');
  8.         $front = $this->getResource('frontController');
  9.         $sModuleDir = $this->getOption('mainModuleDirectory');
  10.        
  11.         $front->registerPlugin(new Application_Plugin_SubModules($sModuleDir));
  12.         $front->setDispatcher(new My_Dispatcher_Custom());
  13.     }
  14.    
  15.     public function _initRoutes()
  16.     {
  17.         $this->bootstrap('frontController');
  18.         $front = $this->getResource('frontController');
  19.        
  20.         $router = $front->getRouter();
  21.         $router->removeDefaultRoutes();
  22.         $router->addRoute(
  23.             'default',
  24.             new Zend_Router_Route(
  25.                 ':mainmodule/:module/:controller/:action/*',
  26.                 array(
  27.                     'mainmodule' => 'default',
  28.                     'module' => 'default',
  29.                     'controller' => 'index',
  30.                     'action' => 'index'
  31.                 )
  32.             )
  33.         );
  34.     }
  35.  
  36. }

Un plugin (application/plugins/SubModules.php):
Código PHP:
Ver original
  1. <?php
  2.  
  3. class Application_Plugin_SubModules extends Zend_Controller_Plugin_Abstract
  4. {
  5.     $this->_modulesDirectory = '';
  6.    
  7.     public function __construct($modulesDirectory)
  8.     {
  9.         $this->_modulesDirectory = $modulesDirectory;
  10.     }
  11.    
  12.     public function routeStartup(Zend_Controller_Request_Abstract $request)
  13.     {
  14.         $sModule = $request->getParam('mainmodule');
  15.         $Front = Zend_Controller_Front::getInstance();
  16.         $Front->getDispatcher()->resetControllerDirectory();
  17.         if (empty($sModule)) {
  18.             $sModule = 'default';
  19.         }
  20.        
  21.         $Front->addModuleDirectory($this->_modulesDirectory . DIRECTORY_SEPARATOR . $sModule);
  22.     }
  23. }

En tu application.ini:
Código:
mainModuleDirectory = APPLICATION_PATH "/generalmodules"
y dentro de generalmodules pones tu module1, module2, default, etc.

Saludos.
  #9 (permalink)  
Antiguo 11/08/2011, 16:40
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años, 7 meses
Puntos: 261
Respuesta: Módulos dentro de módulos?

Gracias GatorV, lo pruebo y te digo como va.

Un saludo,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #10 (permalink)  
Antiguo 14/08/2011, 02:08
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años, 7 meses
Puntos: 261
Respuesta: Módulos dentro de módulos?

Hola GatorV, he estado probando y no consigo que le llegue información del .ini a la línea que comento abajo. Ahora mismo es el único error que marca.
Código PHP:
Ver original
  1. // Línea 9 del bootstrap.php
  2. $sModuleDir = $this->getOption('mainModuleDirectory');

Seguiré haciendo pruebas y te comento.

Un saludo,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #11 (permalink)  
Antiguo 14/08/2011, 06:12
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: Módulos dentro de módulos?

Si haces:

Código PHP:
Ver original
  1. Zend_Debug::dump($this->getOptions());

no te muestra el config ?
__________________
http://es.phptherightway.com/
thats us riders :)
  #12 (permalink)  
Antiguo 14/08/2011, 06:30
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años, 7 meses
Puntos: 261
Respuesta: Módulos dentro de módulos?

Lo he probado tambien con el resto, que si traen valores, pero esta en concreto me da NULL.
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #13 (permalink)  
Antiguo 14/08/2011, 16:24
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años, 7 meses
Puntos: 261
Respuesta: Módulos dentro de módulos?

Hola de nuevo,

Creo que tenía algún archivo sin guardar... pero el error está relacionado con esa variable al pasar al constructor del plugin.

masterpuppet $this->getOptions(); ahora si me muestra el config.

La variable $sModuleDir (línea 9) al pasarla al Zend_Debug, muestra la ruta que hay configurada.

Pero al pasarla al __contruct() del Plugin (línea 11) me sale el error:
Missing argument 1 for My_Controller_Plugin_SubModules::__construct()

Y de que la variable no está definida.

Defino la variable y persiste el error.

Paso la variable del __construct al Zend_Debug

Y me sale dos veces, la primera NULL y la segunda con el valor esperado.
Código:
SUBMODULES __construct - $this->_modulesDirectory 

null

SUBMODULES __construct - $this->_modulesDirectory 

string '/Applications/MAMP/root/app/application/generalmodules'
(length=70)
Bootstrap.php
Código PHP:
Ver original
  1. <?php
  2.  
  3. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
  4. {
  5.     public function _initPlugin()
  6.     {
  7.         $this->bootstrap('frontController');
  8.         $front = $this->getResource('frontController');
  9.         $sModuleDir = $this->getOption('mainModuleDirectory');
  10.        
  11.         $front->registerPlugin(new Application_Plugin_SubModules($sModuleDir));
  12.         $front->setDispatcher(new My_Dispatcher_Custom());
  13.     }

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #14 (permalink)  
Antiguo 15/08/2011, 08:03
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Módulos dentro de módulos?

Es muy raro parecería que esta haciendo dos veces el bootstrap, estas seguro que no tienes ninguna otra configuración adicional que este causando ese doble boot?

Saludos.
  #15 (permalink)  
Antiguo 15/08/2011, 08:13
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años, 7 meses
Puntos: 261
Respuesta: Módulos dentro de módulos?

Cita:
Iniciado por GatorV Ver Mensaje
Es muy raro parecería que esta haciendo dos veces el bootstrap, estas seguro que no tienes ninguna otra configuración adicional que este causando ese doble boot?

Saludos.
Lo revisaré a ver de donde puede venir el error.

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight

Etiquetas: frameworks-y-php-orientado-a-objetos
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:45.