2012-08-02 22 views
7

Tengo en mi routing.yml especificado el parámetro _locale requisitos en cada ruta única y creo que debe ser algo para simplificar esta situación.Symfony2 Ruta global {_locale} requisitos

routing.yml

ProjectBaseBundle_index: 
    pattern: /{_locale} 
    defaults: { _controller: ProjectBaseBundle:Default:index } 
    requirements: 
     _locale: en|es 

ProjectBaseBundle_privacy: 
    pattern: /privacy/{_locale} 
    defaults: { _controller: ProjectBaseBundle:Default:privacy } 
    requirements: 
     _locale: en|es 

..... 

ProjectBaseBundle_legal: 
    pattern: /legal/{_locale} 
    defaults: { _controller: ProjectBaseBundle:Default:legal } 
    requirements: 
     _locale: en|es 

que estoy usando Symfony2.1 beta 3

es posible especificar un requisitos _locale globales para todos mis rutas?

+0

¿En qué versión de Symfony estás trabajando? – j0k

+0

Symfony 2.1, no lo mencioné porque pensé que era una funcionalidad "vieja" del framework – unairoldan

Respuesta

11

he descubierto una manera de hacerlo:

El uso de un enrutamiento "maestro" para importar la configuración de enrutamiento. Como mis paquetes generalmente tienen demasiada información, he estado separando los controladores, recursos y rutas en diferentes "módulos". Como resultado de este enfoque, he descubierto esto:

Maestro routing.yml

ProjectBaseBundle_default: 
    resource: "@ProjectBaseBundle/Resources/config/routing-default.yml" 
    prefix: /{_locale}/project/ 
    requirements: 
     _locale: en|es|de|fr 

Niño de ruta-default.yml

ProjectBaseBundle_default_privacy: 
    pattern: /privacy 
    defaults: { _controller: ProjectBaseBundle:Default:privacy } 

ProjectBaseBundle_default_legal: 
    pattern: /legal 
    defaults: { _controller: ProjectBaseBundle:Default:legal } 

ProjectBaseBundle_default_usage: 
    pattern: /usage 
    defaults: { _controller: ProjectBaseBundle:Default:usage } 

Con esta configuración de enrutamiento, Minimizo los lugares donde se necesita escribir los requisitos locales.

+1

Esa es una solución increíble. Gracias. –

+1

Esto es muy útil. Pero vago. ¿Qué ocurre si quiero que uno de los entornos sea predeterminado (digamos 'es') para poder tener rutas como/project/privacy (apuntando implícitamente a la configuración regional 'en') mientras todavía tengo de explicit/{_ locale} /. .. rutas para otra localidad. ¿Hay alguna manera de decir eso en el 'master' routing.yml ?. He estado intentando con un _locale predeterminado ... pero me convertí en una ilusión. saludos – javigzz

+0

No he encontrado cómo hacer eso. Una vez que importa una ruta con el/_locale/parámetro anterior, es necesario usarla. – unairoldan

0

Echa un vistazo a esta discusión:

https://groups.google.com/forum/#!topic/symfony-devs/6oxsa7whBps

Parece que es posible hacer algo similar a lo que necesita, sólo que el parámetro {_locale} se especifica en el inicio de la ruta, no al final. También se tendría que estar funcionando beta 4 de la versión 2.1 de Symfony (de acuerdo con Fabien)

+0

He visto esta discusión, pero está fechada en junio de 2011 – unairoldan

Cuestiones relacionadas