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

Zend Framework - Zend Router

Estas en el tema de Zend Framework - Zend Router en el foro de Zend en Foros del Web. Buenas, estoy usando Zend_Framework 10.0. En el proyecto que estoy realizando tiene 4 modulos, yo lo que estoy intentando que no he podido dar con ...
  #1 (permalink)  
Antiguo 04/10/2010, 11:25
 
Fecha de Ingreso: octubre-2010
Ubicación: Uruguay, Canelones
Mensajes: 66
Antigüedad: 14 años, 2 meses
Puntos: 6
Zend Framework - Zend Router

Buenas, estoy usando Zend_Framework 10.0.
En el proyecto que estoy realizando tiene 4 modulos, yo lo que estoy intentando que no he podido dar con la tecla es que:

Por defecto la url Zend las lee http://dominio/module/controller/action

Yo lo que estoy intentando es la url Zend las lee http://dominio/:variable/module/controller/action

Osea lo que estoy intentando es pasar una variable antes del module, pero para todos los modulos que tengo

Yo de la unica forma que lo he podido hacer es:

addRouter("descripcion", new Zend_Controller_Router_Route(
'/:variable/:module/:controller/:action',
array('module' => 'default', 'controller' => 'index', 'action' => 'index')
));

Como se ve debo de especificar el module, Controller y action y yo quisiera hacer global, sino debería de escribir para cada module, controller y action, un parametro router diferente.

Espero haberme entendido bien, gracias

Última edición por lalolerena; 04/10/2010 a las 12:58
  #2 (permalink)  
Antiguo 04/10/2010, 14:18
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: Zend Framework - Zend Router

Lo que puedes hacer es remover el default route:
Código PHP:
Ver original
  1. $router->removeDefaultRoutes();
  2. $router->addRoute('default', /* */);

Así tu ruta con tu variable va a ser por defecto la ruta que usara Zend, pero siempre le vas a tener que agregar tu variable, o declararla como opcional...

Saludos.
  #3 (permalink)  
Antiguo 04/10/2010, 18:21
 
Fecha de Ingreso: octubre-2010
Ubicación: Uruguay, Canelones
Mensajes: 66
Antigüedad: 14 años, 2 meses
Puntos: 6
Respuesta: Zend Framework - Zend Router

addRouter("descripcion", new Zend_Controller_Router_Route(
'/:variable/:module/:controller/:action',
array('module' => 'default', 'controller' => 'index', 'action' => 'index')
));
Lo que yo te quiero decir con esto, es que la única forma de poder lograr esta estructura que pretendo es estableciendo a que module, controller y action ejecutar el router, cuando lo que yo quiero es globalizarlo para todos, osea sin especificar array('module' => 'default', 'controller' => 'index', 'action' => 'index')

Gracias
  #4 (permalink)  
Antiguo 04/10/2010, 18:58
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: Zend Framework - Zend Router

No entiendo que es lo que quieres, podrías explicar más, lo que yo te entiendo es que quieres sobreescribir la ruta por defecto...

Saludos
  #5 (permalink)  
Antiguo 04/10/2010, 19:43
 
Fecha de Ingreso: octubre-2010
Ubicación: Uruguay, Canelones
Mensajes: 66
Antigüedad: 14 años, 2 meses
Puntos: 6
Respuesta: Zend Framework - Zend Router

Lo que yo pretendo es, tengo un página http://www.pagina.com/
El default no importa
Pero además del default, tengo 3 modulos mas, llamese: modulo_1, modulo_2, modulo_3

Osea que ingresaria a traves de:
http://www.pagina.com/modulo_1

http://www.pagina.com/modulo_2

http://www.pagina.com/modulo_3

En estos modulo pretendo a traves de Zend_Router es que pueda hacer:
http://www.pagina.com/:variable/modulo_1

http://www.pagina.com/:variable/modulo_2

http://www.pagina.com/:variable/modulo_3

Osea antes de escribir el model, controller, action poder pasar un variable.
Pero solo en los modulos.

Espero haberme entendido, soy nuevo en el Foro, perdon!!!!
  #6 (permalink)  
Antiguo 04/10/2010, 22:20
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: Zend Framework - Zend Router

Pues si solo es para los modulos con la ruta que pusiste solo modificala así:
Código PHP:
Ver original
  1. addRoute("descripcion", new Zend_Controller_Router_Route(
  2. ':variable/:module',
  3. array('module' => 'default')
  4. ));

Saludos.
  #7 (permalink)  
Antiguo 04/10/2010, 23:03
 
Fecha de Ingreso: octubre-2010
Ubicación: Uruguay, Canelones
Mensajes: 66
Antigüedad: 14 años, 2 meses
Puntos: 6
Respuesta: Zend Framework - Zend Router

Fue lo primero que intente, pero no agarra ningun controlador. Me queda la panatalla en blanco!!!!

Gracias por la ayuda
  #8 (permalink)  
Antiguo 04/10/2010, 23:05
 
Fecha de Ingreso: octubre-2010
Ubicación: Uruguay, Canelones
Mensajes: 66
Antigüedad: 14 años, 2 meses
Puntos: 6
Respuesta: Zend Framework - Zend Router

Quedaba más lindo de la forma que consulto a traves de router, pero creo que me voy a tirar por Zend_Session, sino pierdo más tiempo en darle chiche
  #9 (permalink)  
Antiguo 05/10/2010, 08:47
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: Zend Framework - Zend Router

Sigo sin entender lo que requieres, si usas el primer ejemplo que te di, con ese no tendrías problemas para pasar la ruta, y luego el modulo / controlador / accion, precisamente es algo que hice hace poco en un proyecto para incluir la ruta:
Código PHP:
Ver original
  1. $router->removeDefaultRoutes();
  2. $router->addRoute(
  3.         'default',
  4.         new Zend_Controller_Router_Route(
  5.               ':lang/:module/:controller/:action/*',
  6.               array(
  7.                      'module' => 'default',
  8.                      'controller' => 'index',
  9.                      'action' => 'index'
  10.               )
  11.          )
  12. );
  13. $router->setGlobalParam('lang', 'en');

Con eso pude inyectar al inicio de la ruta mi variable.

Saludos.
  #10 (permalink)  
Antiguo 05/10/2010, 11:02
 
Fecha de Ingreso: octubre-2010
Ubicación: Uruguay, Canelones
Mensajes: 66
Antigüedad: 14 años, 2 meses
Puntos: 6
Respuesta: Zend Framework - Zend Router

Osea que con esa funcion me va a surgir efecto para todos los module, controller y action, sin necesidad de especificar para cada uno????

Muchas gracias por la ayuda
  #11 (permalink)  
Antiguo 05/10/2010, 11:44
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: Zend Framework - Zend Router

Te va a sobreescribir la ruta por defecto y usar esa ruta para dibujar las nuevas rutas.

Saludos.
  #12 (permalink)  
Antiguo 05/10/2010, 12:09
 
Fecha de Ingreso: octubre-2010
Ubicación: Uruguay, Canelones
Mensajes: 66
Antigüedad: 14 años, 2 meses
Puntos: 6
Respuesta: Zend Framework - Zend Router

Impresionante, me agarro viaje con:

addRoute("descripcion", new Zend_Controller_Router_Route(
':variable/:module',
array('module' => 'default')
));

Muchas gracias por la ayuda
  #13 (permalink)  
Antiguo 05/10/2010, 16:30
 
Fecha de Ingreso: octubre-2010
Ubicación: Uruguay, Canelones
Mensajes: 66
Antigüedad: 14 años, 2 meses
Puntos: 6
Respuesta: Zend Framework - Zend Router

Ahora, me habia encontrado con un inconveniente y lo he solucionado:
$router->addRoute('descripcion',
new Zend_Controller_Router_Route(':variable/:module/*'),
array(
'module' => 'default',
));

$router->addRoute('DescripcionController',
new Zend_Controller_Router_Route(':variable/:module/:controller/*'),
array(
'module' => 'default',
));

$router->addRoute('DefaultAction',
new Zend_Controller_Router_Route(':variable/:module/:controller/:action/*'),
array(
'module' => 'default',
));

De esta forma, invoco a todo el modulo.

En el caso anterior:
$router->addRoute('descripcion',
new Zend_Controller_Router_Route(':variable/:module/*'),
array(
'module' => 'default',
));


Siempre invocaba a ':variable/:module/index/index, aunque le pusiera otro controller y action

Un abrazo y muchisimas gracias nuevamente
  #14 (permalink)  
Antiguo 27/10/2010, 08:07
 
Fecha de Ingreso: marzo-2005
Ubicación: Málaga
Mensajes: 115
Antigüedad: 19 años, 9 meses
Puntos: 0
Respuesta: Zend Framework - Zend Router

Hola, Buenas tardes.

Yo estoy haciendo algo así, pero este código que tu tienes aquí no me funciona, por lo menos como yo quiero.

Lo que yo quiero es que si pones:

http://www.pagina.com/modulo/controller/action el idioma por defecto sea en

y si pones

http://www.pagina.com/es/modulo/controller/action el idioma entonces sería el es

He estado investigando y por lo que veo creo que este código tuyo sería el correcto, pero no me va.

Cita:
Iniciado por GatorV Ver Mensaje
Sigo sin entender lo que requieres, si usas el primer ejemplo que te di, con ese no tendrías problemas para pasar la ruta, y luego el modulo / controlador / accion, precisamente es algo que hice hace poco en un proyecto para incluir la ruta:
Código PHP:
Ver original
  1. $router->removeDefaultRoutes();
  2. $router->addRoute(
  3.         'default',
  4.         new Zend_Controller_Router_Route(
  5.               ':lang/:module/:controller/:action/*',
  6.               array(
  7.                      'module' => 'default',
  8.                      'controller' => 'index',
  9.                      'action' => 'index'
  10.               )
  11.          )
  12. );
  13. $router->setGlobalParam('lang', 'en');

Con eso pude inyectar al inicio de la ruta mi variable.

Saludos.
  #15 (permalink)  
Antiguo 27/10/2010, 09:34
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: Zend Framework - Zend Router

Lo que pasa es que tu estas hablando de dos rutas diferentes, en cuyo caso el código de la ruta que yo expuse solo funciona si sigues la estructura de /lang/module/controller/action.

Saludos.
  #16 (permalink)  
Antiguo 27/10/2010, 09:38
 
Fecha de Ingreso: marzo-2005
Ubicación: Málaga
Mensajes: 115
Antigüedad: 19 años, 9 meses
Puntos: 0
Respuesta: Zend Framework - Zend Router

Hola de nuevo

Me puedes echar una mano para hacerlo de esa manera?

Sería recoger la variable y ver si es de lang y poner un router distinto para cada caso, pero donde cojo la variable?, en el bootstrap?
  #17 (permalink)  
Antiguo 27/10/2010, 10:08
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: Zend Framework - Zend Router

No es que pongas un router distinto, es que registres dos rutas diferentes cada una con un proposito, la ruta por default de Zend te permite tratar lo que haces y puedes hacer una segunda ruta con un segundo nombre.

En el ejemplo que yo puse es para explicitamente tener que pasar la variable :lang y no tener que específicar la ruta cada que armo un URL.

Saludos.
  #18 (permalink)  
Antiguo 28/10/2010, 05:31
 
Fecha de Ingreso: marzo-2005
Ubicación: Málaga
Mensajes: 115
Antigüedad: 19 años, 9 meses
Puntos: 0
Respuesta: Zend Framework - Zend Router

Hola.

Siguiendo tus palabras he hecho una ruta distinta para cuando empiezo con /es/

Mi proposito es que la web con las direcciones normales sean en inglés pero cuando sean páginas en español sólo habría que introducir delante /es/

osea, pagina original pagina.com/aboutus y pagina en español pagina.com/es/aboutus

He hecho esta ruta y me va bien.

Código PHP:
Ver original
  1. $router->addRoute(
  2.             'es',
  3.             new Zend_Controller_Router_Route(
  4.               'es/:module/:controller/:action/*',
  5.               array(
  6.                      'module' => 'default',
  7.                      'controller' => 'index',
  8.                      'action' => 'index'
  9.               )
  10.              )
  11.              );

Pero ahora resulta que tengo un problema, que las rutas cuando estoy bajo /es/ me salen de la manera pagina.com/es/default/aboutus y claro no quiero que me salga el default, como puedo hacer para que cuando el modulo sea default no me aparezca?
  #19 (permalink)  
Antiguo 28/10/2010, 05:45
 
Fecha de Ingreso: marzo-2005
Ubicación: Málaga
Mensajes: 115
Antigüedad: 19 años, 9 meses
Puntos: 0
Respuesta: Zend Framework - Zend Router

Bueno, eso al final lo he solucionado, porque como en dos idiomas solo voy a utilizar un modulo, he quitado de la ruta el modulo y ahora si me va bien como yo queria.

Ahora tengo otro problema que no termino de solucionar.

Resulta que la web va en dos idiomas, estoy utilizando Zend_Translate y eso me va bien, pero a la hora de hacer setLocale, como lo hago distinguiendo entre que entre con el /es/ delante o no?.

Yo en la route he introducido un land=>es , pero no se como hacerlo exactamente, o si eso se puede hacer en el bootstrap.

Un Saludo.
  #20 (permalink)  
Antiguo 28/10/2010, 07:24
 
Fecha de Ingreso: marzo-2005
Ubicación: Málaga
Mensajes: 115
Antigüedad: 19 años, 9 meses
Puntos: 0
Respuesta: Zend Framework - Zend Router

Ya lo he solucionado, espero que esta sea una buena solucion.

He creado un plugin para recoger el parametro lang que viene, si lo encuentro pongo el idioma que es y sino pongo el de por defecto, osea, pongo el locale a ese idioma.

Gracias de todos modos, si tenéis algún otro punto de vista os lo agradecería.

Un Saludo.
  #21 (permalink)  
Antiguo 28/10/2010, 08:49
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: Zend Framework - Zend Router

De hecho es la forma correcta de hacerlo, y podrías obviar tu segunda ruta (la que tiene /es/ al inicio específicandole el parámetro de entrada:
Código PHP:
Ver original
  1. $router->addRoute(
  2.     'lang',
  3.     new Zend_Controller_Router_Route(
  4.         ':lang/:module/:controller/:action/*',
  5.         array(
  6.             'module' => 'default',
  7.             'controller' => 'index',
  8.             'action' => 'index',
  9.             'lang' => 'es'
  10.         )
  11.     )
  12. );
  #22 (permalink)  
Antiguo 28/10/2010, 08:59
 
Fecha de Ingreso: marzo-2005
Ubicación: Málaga
Mensajes: 115
Antigüedad: 19 años, 9 meses
Puntos: 0
Respuesta: Zend Framework - Zend Router

Con esta solución que me das estaría bien, pero entonces cuando no haya :lang no funciona.

osea, cuando no haya un /es/ delante de los controllers y actions no funciona.

Pregunta tonta, pero que no me sale, como se en que idioma estoy en cada momento? registrando en el plugin y luego recoger del registro?, o hay alguna manera de hacer con el registro que he hecho antes del Zend_Translate?.

Un saludo y gracias por tu dedicacion.
  #23 (permalink)  
Antiguo 28/10/2010, 10:14
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: Zend Framework - Zend Router

Por eso te comentaba que tenías que registrarlo como la ruta default así si pones el parámetro como opcional Zend te va a mandar el es directamente.

Saludos.

Etiquetas: php, zend-framework
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 07:38.