2011-09-08 17 views
5

Estoy reescribiendo un proyecto antiguo usando Symfony2 para poder probar el framework. Tengo las direcciones URL que serán de la forma:¿Cómo enrutar una URL usando una cadena de consulta en Symfony2?

/profile/{id} 

de la manera elegante que Symfony2 lo hace. Sin embargo, la misma página se encontró originalmente por hacer:

/profile.php?id=12345 

Por lo tanto, en caso de que alguien tiene una dirección de edad, me gustaría volver a dirigir estos enlaces. El problema es que no sé cómo atrapar rutas de esta naturaleza. Intenté

/profile.php?id={id} 

pero eso no parecía funcionar. ¿Cómo puedo configurar esta ruta?

Seguimiento: no quiero hacer "catch-all" (debido a que no es intuitivo para mí, así que temo errores futuros), y yo preferiría no hacerlo a través de htaccess para el mismo razón. Creo que la mejor opción es hacer coincidir "/profile.php" y luego en el controlador, verificar que "id" exista en query-string y redirigir en consecuencia. Si no es así, voy a redirigir a 404.

Respuesta

3

veo dos opciones aquí:

  1. a trazar el esquema de edad (/profile.php?id=54321) en el nuevo (/ perfil/54321) usando mod_rewrite (en caso de que use Apache).

  2. Usted escribe un asignador dentro de Symfony. Eso significa que al final de su lista de rutas que especifique un patrón que se acaba de coger todo lo que aún no atrapado:


whatever: 
    pattern: /{whatever} 
    defaults: { _controller: CoreBundle:Default:whatever } 
    requirements: 
    whatever: .+ 

Para (2) que tendrá que comprobar cuál es el Request-object te ofrece las consultas (como getQueryString()), b/c. No estoy seguro de si es posible hacer coincidir algo similar a? Xyz en una ruta.

+0

¿El mod_rewrite correcto sería: 'RewriteRule^profile.php? Id = (\ d +) $/profile/$ 1 [R = 301]'? –

+0

Solo quiero verificar que esta es la mejor estrategia, ya que no soy un experto en Apache htaccess shenanigans –

+0

Yo tampoco. Puede probar las reescrituras aquí: http://martinmelin.se/rewrite-rule-tester/. Aunque preferiría manejar eso con SF. Porque las rutas son hoy en día parte del modelo/lógica. – Raffael

Cuestiones relacionadas