Más con Symfony

2.7. Opciones de las colecciones de rutas

Las colecciones de rutas de objetos incluyen varias opciones para personalizar completamente su funcionamiento. En muchos casos estas opciones son suficientes para configurar la colección sin necesidad de crear una nueva colección propia. El libro The symfony Reference Book contiene la lista completa de todas las opciones de las colecciones de rutas.

2.7.1. Rutas de la acción

Cada colección de rutas admite tres opciones diferentes que determinan exactamente las rutas que se generan en la colección. Sin entrar en muchos detalles, la siguiente colección generaría las siete rutas por defecto junto con una colección de rutas adicional y una ruta de objeto:

pageAdmin:
  class:   acClientObjectRouteCollection
  options:
    # ...
    actions:      [list, new, create, edit, update, delete, show]
    collection_actions:
      indexAlt:   [get]
    object_actions:
      toggle:     [put]

2.7.2. Columna

Por defecto todas las URL generadas emplean la clave primaria del modelo, que también se utiliza para buscar los objetos. Obviamente este comportamiento se puede modificar con facilidad. El siguiente ejemplo utiliza la columna slug en vez de la clave primaria:

pageAdmin:
  class:   acClientObjectRouteCollection
  options:
    # ...
    column: slug

2.7.3. Métodos del modelo

Por defecto la ruta obtiene todos los objetos relacionados con la colección y utiliza la columna especificada en column para las rutas de los objetos. Si necesitas redefinir ese comportamiento, añade la opción model_methods en la ruta. En este ejemplo se deben añadir los métodos fetchAll() y findForRoute() a la clase PageTable. A los dos métodos se les pasa como argumento un array con los parámetros de la petición:

pageAdmin:
  class:   acClientObjectRouteCollection
  options:
    # ...
    model_methods:
      list:       fetchAll
      object:     findForRoute

2.7.4. Parámetros por defecto

Por último, imagina que todas las rutas de la colección necesitan un determinado parámetro en la petición. Esto se puede conseguir fácilmente con la opción default_params:

pageAdmin:
  class:   acClientObjectRouteCollection
  options:
    # ...
    default_params:
      foo:   bar