2013-07-26 13 views
7

Odnosząc się do tego,Jak utworzyć trasę w symfony 2, która odwzorowuje zewnętrzny URL?

http://symfony.com/doc/current/book/routing.html

możemy map wzorzec URL do kontrolera i akcji

app/config/routing.yml

blog_show: 
    path:  /blog/{slug} 
    defaults: { _controller: AcmeBlogBundle:Blog:show } 

chcę mapować ścieżkę do zewnętrznego adres URL.

app/config/routing.yml

blog_show: 
    path:  /blog/{slug} 
    defaults: "www.example.com/blog" 

Wymóg jest, moja obecna strona jest w Kohana, jestem przenoszenie go stopniowo do Symfony 2. Dla mojego Symfony2 aplikacja Kohana URL są jak zewnętrznych adresów URL, I chcesz skonfigurować te adresy URL w routingu i używać ich w standardowy sposób, np.

np. w gałązka,

<a href="{{ path('blog_show'}}"> 
    Read this blog post. 
</a> 

Więc później, kiedy portu moich stron do Symfony, będę musiał zmienić tylko plik routingu tak, że mogę używać tego samego klucza blog_show odnosi się do adresu URL i nie będę”mają zmienić wszystko pliki, w których użyłem adresów URL.

+0

jeśli potrzebujesz więcej niż towar 'Redirect: urlRedirect' zapewnia (jako opisane przez https://stackoverflow.com/a/22861229/719662), wystarczy napisać własny kontroler obsługujący przekierowania w sposób uwzględniający niestandardową funkcjonalność, której potrzebujesz (np.slugging) – vaxquis

Odpowiedz

-1

Funkcja routera Symfony nie działa w ten sposób ...

Proponuję utworzyć rozszerzenie Gałązka do tego. Przeczytaj więcej na ten temat tutaj: http://symfony.com/doc/current/cookbook/templating/twig_extension.html

Można utworzyć funkcję, która działa bardzo podobnie do zwykłej funkcji url(), aby można było przeprowadzić migrację tak łatwo, jak to możliwe.

{{ legacyUrl('blog_post', {slug: 'my-blog-post'}) }} 

Po migracji bloga do Symfony, wszystko co musisz zrobić, to stworzyć trasę o nazwie "blog_post" i "zmiana" legacyUrl do "URL".

+0

Chciałem uniknąć wprowadzania zmian we wszystkich plikach szablonów gałązek po przeniesieniu wszystkich zewnętrznych adresów URL do symfony. Chciałbym tylko zmienić trasy. – vishal

+0

Możesz nadać tej funkcji bardziej ogólną nazwę, tj. getUrl(). Po migracji można dostosować tę funkcję, aby działała w ten sam sposób, co domyślna funkcja url(). – Webberig

+0

w rzeczywistości, router Symfony * działa * w ten sposób - możesz przekierować albo we własnym kontrolerze, albo użyć zapasowego (np. Https://stackoverflow.com/a/22861229/719662 opis) – vaxquis

-1

Wygląda na to, że nie ma natywnej metody Symfony, aby poradzić sobie z tym problemem.

+0

w rzeczywistości jest: https : //stackoverflow.com/a/22861229/719662 – vaxquis

8

Można to zrobić za pomocą jednego z kontrolerów ramowych Symfony choć nie jestem pewien, jak to będzie działać z parametrami:

blog_show: 
    path: /blog/{slug} 
    defaults: 
     _controller: FrameworkBundle:Redirect:urlRedirect 
     path: "http://example.com/blog" 
     permanent: true 

Zauważ, że path: /blog/{slug} chwyta ślimak bezpośrednio, ale path: "http://example.com/blog/{slug}" nie działa .

Źródło: http://symfony.com/doc/current/cookbook/routing/redirect_in_config.html

+0

Bardzo pomocna odpowiedź - mimo że edytowałem drugą część, ponieważ nie działa zgodnie z opisem ('RedirectController.php' nie wyświetla żadnego przepisu do obsługi samych ślimaków). BTW: ta metoda działa również w przypadku lokalnych przekierowań ścieżki do katalogów nie obsługiwanych bezpośrednio przez Symfony (na przykład 'path:"/some-local-path-to-a-directory "'). – vaxquis