Cambiar separador de routing en Symfony

Guardar este artículo en Delicious Compartir este artículo en Twitter Compartir este artículo en Facebook

En alguna ocasión me he encontrado con que quería cambiar lo que Symfony entiende por un separador en la URL y nunca me acuerdo dónde se hace, así que lo escribo aquí por si a vosotros os ha pasado también alguna vez o no lo sabíais, y así la próxima vez también sé yo donde mirar. Explico lo que me pasaba con un ejemplo real de hace unos minutos mientras migraba Efemerides 2.0, proyecto al que me gustaría hacer unos cambios y ya de paso he pensado que no estaría mal pasarlo primero al framework Symfony.

Resulta que el proyecto tiene URLs como esta: http://efemerides20.com/4-de-diciembre. Dónde realmente estoy pasando dos variables por la URL: el 4 indicando el día, y ‘diciembre’ indicando el mes. Así que en el archivo routing.yml de Symfony he creado la ruta así:

day:
  url:   /:day-de-:month
  param: { module: efemeride, action: day }
  requirements: { month: \w+, day: \d+ }

Cuando he accedido, me ha saltado error 404 diciéndome que no había niguna ruta que coincidiera con esa URL. EL problema es que por defecto Symfony no entiende los guiones como separadores en la URL, y solo interpreta como tales el punto ‘.’ y la barra ‘/’. Si queremos cambiar esto y que la ruta definida funcione correctamente tenemos que añadir el punto a lo que Symfony entiende como separadores de segmentos en la URL. Para ello hay que modificar el fichero factories.yml de la aplicación en cuestión (en este caso frontend).

En ese fichero (apps/modules/frontend/config/factories.yml) hay un pequeño apartado dedicado al enrutamiento que seguramente y si no lo habéis cambiado pondrá lo siguiente:

  routing:
    class: sfPatternRouting
    param:
      generate_shortest_url:            true
      extra_parameters_as_query_string: true

Pues para hacer que nuestra ruta funcione solo hay que añadir un nuevo parámetro a esa configuración de la siguiente manera en mi caso:

  routing:
    class: sfPatternRouting
    param:
      generate_shortest_url:            true
      extra_parameters_as_query_string: true
      segment_separators: ['/', '.', '-']

Es decir, añadir en el parámetro segment_separators todos los caracteres que querráis permitir como separadores.

Deja un comentario