2011-09-08 14 views
5

Sto riscrivendo un vecchio progetto utilizzando Symfony2, così posso provare il framework. Ho URL che saranno di forma:Come si indirizza un URL utilizzando una stringa di query in Symfony2?

/profile/{id} 

nel modo snazzy che Symfony2 lo fa. Tuttavia, la stessa pagina trovava originariamente facendo:

/profile.php?id=12345 

Quindi, nel caso in cui qualcuno ha un vecchio URL, mi piacerebbe reindirizzare questi collegamenti. Il problema è che non so come catturare rotte di questa natura. Ho provato

/profile.php?id={id} 

ma quello non ha funzionato. Come posso impostare questo percorso?

Follow-up: Non voglio fare "catch-all" (perché non è intuitivo per me così temo insetti futuri), e preferirei non farlo tramite .htaccess per lo stesso ragionare. Penso che l'opzione migliore sia far corrispondere "/profile.php" al controller, verificare che "id" esista in query-string e reindirizzare di conseguenza. Se così non fosse, mi reindirizzare a 404.

risposta

3

Vedo due opzioni qui:

  1. di mappare il vecchio schema (/profile.php?id=54321) sul nuovo (/ profile/54321) usando mod_rewrite (nel caso si usi Apache).

  2. Scrivi un mapper in Symfony. Ciò significa che alla fine della vostra lista dei percorsi si specifica un modello che sarà solo catturare tutto non ancora catturato:


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

Per (2) si dovrà verificare ciò che il L'oggetto di richiesta ti offre le domande (come getQueryString()), b/c non sono sicuro se sia possibile avere qualcosa come? Xyz che viene abbinato in una rotta.

+0

Il mod_rewrite corretto sarebbe: 'RewriteRule^profile.php? Id = (\ d +) $/profile/$ 1 [R = 301]'? –

+0

Voglio solo verificare che questa sia la migliore strategia, dal momento che non sono un esperto di Apache htaccess shenanigans –

+0

Né neanche. È possibile verificare le riscritture qui: http://martinmelin.se/rewrite-rule-tester/. Anche se preferirei gestirlo con SF. Perché le rotte oggigiorno fanno parte del modello/della logica. – Raffael

Problemi correlati