2013-07-26 6 views
7

auf diese BezugWie erstellt man die Route in Symfony 2, die auf externe URLs verweist?

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

wir URL-Muster

app/config/routing.yml

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

Ich möchte Karte den Weg zu externen an die Steuerung und Aktion abbilden url.

app/config/routing.yml

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

Die Anforderung ist, meine aktuelle Website ist in kohana, ich bin es allmählich zu symfony 2. Für meine Symfony2 App kohana URL sind wie externe URLs zu portieren, ich Sie möchten diese URLs im Routing konfigurieren und sie wie üblich verwenden.

z in Zweig,

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

So später, wenn ich Port meinen Seiten Symfony, ich nur ändern müssen Datei-Routing, so dass ich denselben blog_show Schlüssel nutzen könnten, um mit url und ich verweise werde nicht ändern‘haben alle Dateien, in denen ich URLs verwendet habe.

+0

Wenn Sie mehr als Lager benötigen 'Redirect: urlRedirect' bietet (als beschrieben von https://StackOverflow.com/a/22861229/719662), schreiben Sie einfach Ihren eigenen Controller, der die Weiterleitungen bearbeitet, und zwar auf eine Weise, die die von Ihnen benötigte benutzerdefinierte Funktionalität enthält (z.slugging) – vaxquis

Antwort

-1

Die Router-Funktion des Symfony nicht so funktioniert ...

Ich schlage vor, Sie für diese einen Zweig Erweiterung erstellen. Lesen Sie mehr dazu hier:

Sie könnten eine Funktion erstellen, die der regulären url() -Funktion sehr ähnlich ist, so dass Sie so einfach wie möglich migrieren können.

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

Nachdem Sie den Blog zu Symfony migriert, alles, was Sie tun müssen, ist eine Route „blog_post“ und Wandel „legacyUrl“ auf „URL“ genannt erstellen.

+0

Ich wollte vermeiden, Änderungen an allen Zweig Vorlage Dateien zu machen, sobald ich meine alle externen URLs in Symfony portieren. Ich möchte nur die Routen ändern. – vishal

+0

Sie könnten der Funktion einen allgemeineren Namen geben, dh. getUrl(). Nach der Migration können Sie diese Funktion anpassen, so dass sie genauso funktioniert wie die Standardfunktion url(). – Webberig

+0

tatsächlich, Symfony Router * funktioniert so - Sie können entweder in Ihrem eigenen Controller umleiten, oder verwenden Sie eine Aktie (wie https://stackoverflow.com/a/22861229/719662 beschreibt) – vaxquis

-1

Scheint, es gibt keinen nativen Symfony Weg, um dieses Problem zu behandeln.

+0

tatsächlich gibt es: https : //stackoverflow.com/a/22861229/719662 – vaxquis

8

Sie können dies tun, indem Sie eine der Symfony Framework-Controller verwenden, obwohl ich nicht sicher bin, wie dies mit den Parametern arbeiten würde:

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

Beachten Sie, dass path: /blog/{slug} die Schnecke direkt packt, aber path: "http://example.com/blog/{slug}" funktioniert nicht .

Quelle: http://symfony.com/doc/current/cookbook/routing/redirect_in_config.html

+0

Eine sehr hilfreiche Antwort - obwohl ich den zweiten Teil bearbeitet habe, da es nicht wie beschrieben funktioniert ('RedirectController.php' zeigt keine Vorkehrung, um mit Nacktschnecken umzugehen). Übrigens: Diese Methode funktioniert auch für lokale Pfadweiterleitungen zu Verzeichnissen, die nicht direkt von Symfony verwaltet werden (z. B. 'path:"/some-local-path-to-a-directory "). – vaxquis

0

Ab Symfony 2.2 ist dies möglich, indem die Host-Einschränkung auf die Routen hinzu:

routing.yml

user_homepage: 
    path: /path/to/whatever 
    host: "sub.domain.ext" 
    defaults: 
    _controller: forExampleAnyNamespaceBundle:Controller:action 

auf das offizielle Blog-Post Es gibt Ausgabe: http://symfony.com/blog/new-in-symfony-2-2-url-host-support-in-the-routing

+1

Dies ist nicht, was OP über IMO gefragt hat – vaxquis

Verwandte Themen