Symfony2 Templating ohne Anfrage

8

Ich versuche eine E-Mail von einem ContainerAwareCommand in Symfony2 zu senden. Aber ich bekomme diese Ausnahme, wenn die E-Mail-Vorlage rendern durch:

%Vor%

Ausnahme :

%Vor%

Ich habe in GitHub gefunden, dass dieser Helfer das Anfrageobjekt benötigt. Jeder weiß, wie kann ich das Request-Objekt instanziieren?

    
Martin Borthiry 11.01.2012, 16:04
quelle

4 Antworten

1

Da Sie keine Anfrage haben, müssen Sie den Vorlagenservice direkt wie folgt aufrufen:

%Vor%     
Matthew 04.02.2012, 16:01
quelle
19

Sie müssen den Container in den richtigen Bereich setzen und eine (gefälschte) Anfrage stellen. In den meisten Fällen wird dies ausreichen:

%Vor%

Die ganze Geschichte ist hier . Wenn Sie die Details wissen möchten, lesen Sie dieses Problem auf github .

    
BetaRide 11.01.2013 11:11
quelle
4

Das Problem tritt auf, weil Sie die Funktion asset () in Ihrer Vorlage verwenden.

Standardmäßig verwendet asset () den Request -Dienst, um URLs für Ihre Assets zu generieren (es muss wissen, welcher Basispfad zu Ihrer Website ist oder was ist) der Domain-Name, wenn Sie beispielsweise absolute Asset-URLs verwenden).

Aber wenn Sie Ihre Anwendung über die Befehlszeile ausführen, gibt es keine Anfrage .

Eine Möglichkeit, dies zu beheben, ist die explizite Definition von Basis-URLs für Ihre Assets in config.yml wie folgt:

%Vor%

Es ist wichtig, sowohl Ссылка als auch ssl zu definieren, da asset () immer noch vom Anforderungsdienst abhängig ist, wenn Sie eines davon auslassen .

Der (mögliche) Nachteil ist, dass alle URLs zu Assets jetzt absolut sind.

    
dr.scre 24.06.2014 09:26
quelle
1

Nach der BetaRide Antwort bin ich auf dem richtigen Weg, aber das war nicht ausreichend. Dann beschwerte es sich: "Es konnte keine URL für die angegebene Route erstellt werden" "da eine solche Route nicht existiert."

Um eine gültige Anfrage zu erstellen, habe ich sie wie folgt geändert, um die Wurzel des Projekts anzufordern:

%Vor%

Sie müssen möglicherweise eine andere Route aufrufen (gesicherte root?), root funktionierte für mich gut.

Symfony2 Docs

Bonus-Zusatz:

Ich musste so viel Templating / Routing in cli durch Symfony2-Befehle machen, dass ich die Methode initializeContainer() in AppKernel aktualisiert habe. Es erstellt eine Route zum Stamm der Site, legt den Routerkontext fest und täuscht eine Benutzeranmeldung vor:

%Vor%

Sie brauchen vielleicht nicht den letzten $container->get('router')->getContext()->setBaseUrl($request->getRequestUri()); -Teil, aber ich musste es tun, weil mein Site-Root auf domain.com/siteroot/ war und der Router für die URL-Generierung strip / siteroot / away war.

    
Vigintas Labakojis 10.11.2014 15:39
quelle

Tags und Links