He leído todas las publicaciones sobre enrutamiento y documentación de Zend, pero todavía no puedo resolver este problema.Zend Problemas de enrutamiento
Tengo una aplicación de varios idiomas con dos módulos: por defecto y admin. La selección de idioma está funcionando bien (en un controlador routeShutdown Plugin), pero tiene algunos problemas para configurar el router:
Quiero tener éstos de trabajo URL:
/
/controller
/controller/action
/action (default controller)
/controller/param (default action)
/admin
/admin/admin-controller
/admin/admin-controller/action
y utilizando el selector de idioma sería :
/en
/en/controller
/en/controller/action
/en/action (default controller)
/en/controller/param (default action)
/en/admin/admin-controller
/en/admin/admin-controller/action
he añadido esto a mi archivo bootstap (index.php):
$frontController = Zend_Controller_Front::getInstance();
$router = $frontController->getRouter();
$router->removeDefaultRoutes();
$router->addRoute('langmodcontrolleraction',
new Zend_Controller_Router_Route('/:lang/:module/:controller/:action',
array('lang' => ':lang'))
);
$router->addRoute('langmodcontroller',
new Zend_Controller_Router_Route('/:lang/:module/:controller',
array('lang' => ':lang',
'action' => 'index'))
);
$router->addRoute('langmod',
new Zend_Controller_Router_Route('/:lang/:module',
array('lang' => ':lang',
'action' => 'index',
'controller' => 'index'))
);
$router->addRoute('lang',
new Zend_Controller_Router_Route('/:lang',
array('lang' => ':lang',
'action' => 'index',
'controller' => 'index',
'module' => 'default'))
);
$frontController->setControllerDirectory(array(
'default'=>BASE_PATH.'app/modules/default/controllers',
'admin'=>BASE_PATH.'app/modules/admin/controllers'));
Con el fin de comprobar cómo el router es analizar la URL, he añadido un var_dump al plugin routeShutdown:
Introducción a /es, me sale:
array
'lang' => string 'en' (length=2)
'action' => string 'index' (length=5)
'controller' => string 'index' (length=5)
'module' => string 'default' (length=7)
lo cual está bien. Pero cuando entro a /es/Controller1 me sale:
array
'lang' => string 'en' (length=2)
'module' => string 'controller1' (length=8)
'action' => string 'index' (length=5)
'controller' => string 'index' (length=5)
Se ajuste del módulo de "Controller1". ¿Cómo puedo decirle al enrutador que configure el valor predeterminado para el módulo? Y para una URL como/en/controller/param? (configuración de módulo y acción por defecto)
esta es una respuesta muy útil, su explicación es perfecta, ahora entiendo cómo funciona el enrutamiento :) ¡gracias! Cuando llego a 15 rep. Voy a votar tu respuesta. Aquí está mi sitio web, donde implementaré esto: [tryandsay.com] (http://www.tryandsay.com) – Gustavo