Enrutamiento en Symfony2: parámetro opcional en cuatro urls para una ruta

En mi aplicación Symfony2 me gustaría hacer cuatro URL posibles con una ruta:

  1. a-lot-of-other-stuff / report / -20 (número negativo)
  2. a-lot-of-other-stuff / report / 40 (número positivo)
  3. a-lot-of-other-stuff / report / (no number)
  4. a-lot-of-other-stuff / report (sin número y sin /)

Mi ruta actualmente se ve así:

report: pattern: /report/{days} defaults: { _controller: "AppReportBundle:Report:dayReport", days = null } 

La acción se define como:

 public function dayReportAction($days = null) { // my code here } 

Esto actualmente hace que las URL 1 y 2 funcionen, pero en el caso de las URL 3 y 4, aparece un error

Ruta no encontrada

¿Cómo puedo hacer que el parámetro “días” sea opcional?
Y si el parámetro no se proporciona, ¿cómo puedo permitir que / se omita?

Aquí hay una manera de hacer esto

routing.yml

 report: pattern: /report/{days} defaults: { _controller: "AppReportBundle:Report:dayReport", days: null } requirements: days: -?\d+ report_reroute: pattern: /report/ defaults: _controller: FrameworkBundle:Redirect:redirect route: report permanent: true 

Como los requisitos son un patrón de expresión regular, le permite tener un número negativo.

La sección de reencaminamiento obliga a la ruta /report/ redirigir a /report
Puede leer sobre esto en: Cookbok EntryElnur's Answer

Con tal comportamiento, tendrías:

 Route | Action | Parameters ------------|------------------------|------------- /report | dayReportAction | $days = null /report/ | 301 to /report | /report/60 | dayReportAction | $days = 60 /report/-4 | dayReportAction | $days = -4 /report/foo | 404 |