2010-12-31 12 views
5

Soy un novato de Zend Framework, y estoy tratando de encontrar la manera de agregar otra ruta a mi archivo application.ini.Establecer rutas en application.ini en Zend Framework

Actualmente tengo mis rutas establecidas como sigue:

resources.router.routes.artists.route = /artists/:stub 
resources.router.routes.artists.defaults.controller = artists 
resources.router.routes.artists.defaults.action = display 

... para que /artistas/Joe Bloggs- utiliza la acción "pantalla" de los "artistas" del controlador en el perfil Dipslay el artista en cuestión, eso funciona bien.

Lo que quiero hacer ahora es configurar otra ruta para que /artists/joe-bloggs/random-gallery-name vaya a la acción "galerías" del controlador "artistas".

He intentado añadir un bloque adicional en el fichero de application.ini (debajo del bloque de arriba), así:

resources.router.routes.artists.route = /artists/:stub/:gallery 
resources.router.routes.artists.defaults.controller = artists 
resources.router.routes.artists.defaults.action = galleries 

... pero cuando lo hago que la página en /artistas/Joe-bloggs ya no funciona (Zend intenta enrutarlo al controlador "joe-bloggs").

¿Cómo configuro las rutas en application.ini para poder cambiar la acción del controlador "artistas" dependiendo de si existe "/: gallery"?

Me doy cuenta de que probablemente estoy cometiendo un error realmente estúpido, así que por favor señala mi estupidez y ponme en el camino correcto (sin juego de palabras).

Respuesta

4

Intente invertir el orden de las rutas. ZF coincide con las rutas en el orden opuesto en que se agregaron (de modo que la ruta predeterminada es la última en coincidir)

Si eso no funciona, es probable que deba investigar las rutas de expresión regular con componentes opcionales.

1

lo general configuración mis rutas en application/Bootstrap.php (o donde su archivo Bootstrap.php es)

añadir un método como el siguiente:

protected function _initRoutes() 
{ 
    $ctrl = Zend_Controller_Front::getInstance(); 
    $router = $ctrl->getRouter(); 
    $router->addRoute(
      'artist_detail', 
      new Zend_Controller_Router_Route('artists/:stub', 
              array('controller' => 'artists', 
                'action' => 'display')) 
    ); 

    $router->addRoute(
      'artist_detail_gallery', 
      new Zend_Controller_Router_Route('artists/:stub/:gallery', 
              array('controller' => 'artists', 
                'action' => 'gallery')) 
    ); 



} 

Por lo que el control de un clima artista específico tiene una galería, en el caso de mi ejemplo, me gustaría tener un método galleryAction en el ArtistsController

hacer una verificación de si existe una galería para el 'talón' solicitud de parámetro de, si es imposible lanzar un 404:

throw new Zend_Controller_Action_Exception("Object does not exist", 404); 

o redirigirlos a alguna otra página:

return $this->_helper->redirector('index', 'index'); //redirect to index action of index controller 

Espero que esto ayude.

+0

prefiero esto como una solución de enrutamiento, es mucho más prolija y más fácil de entender que ponerlo en la aplicación.ini – jolyonruss

+1

@jolyonruss, por otro lado, no –

3

Su segundo bloque debe tener un nombre de ruta diferente, cambiar el nombre de la palabra 'artistas' a algo similar a esto para su nuevo bloque:

resources.router.routes.artists-gal.route = /artists/:stub/:gallery 
resources.router.routes.artists-gal.defaults.controller = artists 
resources.router.routes.artists-gal.defaults.action = galleries