2012-05-03 7 views

Respuesta

12

¿Se refiere a marcadores de posición con requisitos?

blog: 
    pattern: /blog/{page} 
    defaults: { _controller: AcmeBlogBundle:Blog:index, page: 1 } 
    requirements: 
     page: \d+ 

Aquí tiene varias rutas definidas por un marcador de posición, validadas por expresiones regulares que van a la misma acción del controlador.

Editar:

Cada parte de la URL puede ser un marcador de posición.

blog: 
    pattern: /{type}/{page} 
    defaults: { _controller: AcmeBlogBundle:Blog:index, page: 1 } 
    requirements: 
     type: blog|articles 
     page: \d+ 
+0

respuesta @svassr actualiza – ilanco

+0

¿y si quiero tener el tipo omitirse? Por ejemplo, ¿cómo definirías una ruta para: '/ posts/sport/2',' posts/sport', 'posts/2'. Entonces, la ruta genérica es: '/ posts/{category}/{page}', pero obviamente no funciona solo con los valores predeterminados. ¿Hay alguna manera de decirle a Symfony cómo reconocer si el segundo parámetro es string/int? –

24

Al usar anotaciones, puede definir múltiples rutas. Al igual que:

/** 
* @Route ("item1") 
* @Route ("item/2") 
* @Method("GET") 
*/ 
public function itemAction() { 

} 

estoy usando la versión 2.0.9

+2

Eso es realmente interesante, me gusta la idea de tener las rutas relacionadas definidas justo antes de una _Acción_, pero preferiría mantener todo en un solo _routing.yml_ en lugar de extender mis reglas de enrutamiento en todos mis controladores – svassr

+5

Como probablemente tenga el aplicación/consola abierta, no olvide el enrutador: comando de depuración para ver todas sus rutas. Si usa anotaciones, obtendrá nombres razonables para sus rutas de manera predeterminada, por lo que es bastante fácil encontrar el controlador. – cvaldemar

+1

No es posible mantener todas las rutas en un archivo cuando utiliza varios paquetes (cuando incluye rutas como recurso en la aplicación principal 'routing.yml'), por lo que este no es realmente un argumento para el enrutamiento. Las anotaciones son fáciles de usar, fáciles de debug ('router: debug') y configurables (puede establecer su propio nombre, por ejemplo:' @Route ("/", name = "homepage") '). – Wirone

4

Anotaciones ejemplo para rutas con los parámetros:

/** 
* @Route("/shops/{page}", name="shops") 
* @Route("/shops/town/{town}/{page}", name="shops_town") 
* @Route("/shops/department/{department}/{page}", name="shops_department") 
*/ 
public function shopsAction(Town $town = null, Department $department = null, $page = 1) 
{ ... } 

luego generar ruta en rama como esto:

{{ path('shops_town') }} 

o

{{ path('shops_town', {'town': town.id}) }} 

o

{{ path('shops_department', {'department': department.id}) }} 
Cuestiones relacionadas