Ich wechsle von CodeIgniter zu Symfony 2. Kann mir bitte jemand ein Beispiel geben, wie man:
- Holen Sie sich die Basis-URL (die URL ohne die routenspezifischen Teile)
- Übergeben Sie diese Variable global an das Zweigbündel, damit ich sie in jeder Vorlage verwenden kann.
Antworten:
Warum benötigen Sie diese Root-URL? Können Sie keine direkten absoluten URLs generieren?
Dieser Twig-Code generiert die vollständige http: // URL zur _demo_hello-Route.
Wenn Sie die Basis-URL der Website abrufen, erhalten Sie nur die vollständige URL der Homepage-Route:
( Homepage oder wie auch immer Sie es in Ihrer Routing-Datei nennen).
quelle
Dies ist jetzt kostenlos in Zweigvorlagen verfügbar (getestet auf sf2 Version 2.0.14).
Versuchen Sie in späteren Symfony-Versionen (getestet auf 2.5):
quelle
{{ app.request.baseUrl }}
(es wird die Getter-Methode lokalisieren und diese automatisch aufrufen){{ app.request.getSchemeAndHttpHost() }}
funktioniert!Sie können die neue Anforderungsmethode verwenden
getSchemeAndHttpHost()
:quelle
Die Basis-URL ist im Inneren definiert
Symfony\Component\Routing\RequestContext
.Es kann wie folgt vom Controller abgerufen werden:
quelle
Gültig von Symfony v2.1 bis v4.1 +
Wenn Sie die Basis-URL zu einer Symfony-Anwendung verwenden möchten, sollten Sie
getSchemeAndHttpHost()
verkettet zusammen mit verwendengetBaseUrl()
, ähnlich wie diesgetUri()
funktioniert, außer ohne den Routerpfad und die Abfragezeichenfolge.Wenn beispielsweise Ihre Symfony-Website-URL unter lautet
https://www.stackoverflow.com/app1/
, geben diese beiden Methoden die folgenden Werte zurück:getSchemeAndHttpHost
getBaseUrl
Hinweis:
getBaseUrl()
Enthält den Skriptdateinamen (dh/app.php
), falls er in Ihrer URL enthalten ist.quelle
Für Symfony 2.3+ sollte es sein, die Basis-URL in einem Controller zu erhalten
quelle
$this->container->get('request')->getSchemeAndHttpHost()
oder vom Controller
quelle
Auch für js / css / image URLs gibt es ein praktisches Funktionselement ()
quelle
Anstatt eine Variable global an die Vorlage zu übergeben, können Sie eine Basisvorlage definieren und den 'globalen Teil' darin rendern. Die Basisvorlage kann vererbt werden.
Beispiel für eine Rendering-Vorlage Aus der Symfony-Dokumentation:
quelle
Für die aktuelle Symfony-Version (zum Zeitpunkt des Schreibens dieser Antwort ist es Symfony 4.1) greifen Sie nicht wie in einigen anderen Antworten direkt auf den Service-Container zu.
Fügen Sie stattdessen (sofern Sie nicht die Standarddienstkonfiguration verwenden) das Anforderungsobjekt durch Typhinweise ein.
Siehe auch offizielle Symfony-Dokumente zum Abrufen des aktuellen Anforderungsobjekts .
quelle
quelle
In einer Situation mit einer Multi-Domain-Anwendung hat
app.request.getHttpHost
mir geholfen. Es gibt so etwas wieexample.com
oder zurücksubdomain.example.com
(oderexample.com:8000
wenn der Port nicht Standard ist). Dies war in Symfony 3.4.quelle
Ich habe alle Optionen hier ausprobiert, aber sie haben bei mir nicht funktioniert. Irgendwann habe ich es zum Laufen gebracht
Hoffe, das hilft jemandem, der immer noch Probleme hat.
quelle
site
enthält?