Wie man Twig Schablone von der Datenbank in symfony2 rendert
Ich arbeite Anwendung geschrieben, in symfony2 und ich möchte E-Mails senden, nachdem eine Aktion/event... das problem ist, dass die Nutzer definig so etwas wie "E-Mail-Vorlagen", die speichert in db wie einfache Zeichenfolge, zum Beispiel: "Dies ist eine E-Mail von {{ user }}" und ich brauche die render-Körper für die E-Mail von Vorlage...
In der symfony-Dokumentation unter diesem link: http://symfony.com/doc/2.0/cookbook/email.html#sending-emails das methos für das Rendern ist $this->renderView und es erwartet Verweis auf Datei, die als "bundle:controller:file.html-Code.Zweig", aber meine Vorlage ist der Datenbank als einfacher string...
Wie kann ich es machen?
InformationsquelleAutor der Frage Karol Fiturski | 2011-11-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Twig_Loader_String ist veraltet und war immer konzipiert für den internen Gebrauch sowieso. Die Nutzung dieser loader wird dringend abgeraten.
Aus der API-doc:
Schauen Sie sich auch dieses Problem: https://github.com/symfony/symfony/issues/10865
Die beste Möglichkeit, die ich kenne, laden Sie eine Vorlage von einem String source sind:
Aus einem controller:
wie hier beschrieben: http://twig.sensiolabs.org/doc/recipes.html#loading-a-template-from-a-string
Von einem Zweig, Vorlage:
wie hier beschrieben: http://twig.sensiolabs.org/doc/functions/template_from_string.html
Beachten Sie, dass die 'template_from_string' - Funktion ist nicht standardmäßig verfügbar und muss geladen werden. In symfony tun Sie dies, indem Sie einen neuen service:
InformationsquelleAutor der Antwort Atan
Sollte diese Arbeit. Ersetzen Sie "Hallo {{ name }}" mit Ihrer Vorlage, und füllen Sie dann das array, das übergeben wird in der render-Funktion mit Variablen, die Sie brauchen.
InformationsquelleAutor der Antwort adavea
Klon der native
twig
service und ersetzen Sie die Dateisystem-loader mit dem native Zweig string loader:Beispiel zur Verwendung in einem controller:
InformationsquelleAutor der Antwort Philipp Rieber
Den Twigengine nicht unterstützt rendering-strings. Aber es gibt ein bundle verfügbar, welche fügt dieses Verhalten genannt TwigstringBundle.
Er fügt hinzu, die
$this->get('twigstring')
service, welches Sie verwenden können, um das rendering Ihrer Saiten.InformationsquelleAutor der Antwort Kristian Zondervan
Der beste Weg, es zu tun, ist die Verwendung
template_from_string
twig-Funktion.Sehen Dokumentation von
template_from_string
Sehen, warum es nicht eine gute Idee zu verwenden
Twig_Loader_Chain
oderTwig_Loader_String
für diesen Zweck auf diese github-issue von stof.InformationsquelleAutor der Antwort Quentin
Mit Symfony 2.2 Sie können die Twig_Chain_Loader
Gewusst wie: registrieren von einem anderen (benutzerdefinierten) Zweig loader im Symfony2-Umfeld?
InformationsquelleAutor der Antwort Juburin
FYI, Dieses feature wurde vorgeschlagen werden Hinzugefügt im Kern der Zweig, der als der 1.11.0 werden, wird aber benötigt, um aktiviert zu werden, durch den Entwickler.
InformationsquelleAutor der Antwort yvoyer
Finden Sie ein gutes Beispiel hier :
http://twig.sensiolabs.org/doc/recipes.html#using-a-database-to-store-templates
InformationsquelleAutor der Antwort me987654323
Ich hatte vor kurzem zu implementieren, die ein CMS verwendet, die von mehreren Parteien, wo jede Partei kann vollständig anpassen Ihre Vorlagen. Um dies zu erreichen habe ich implementiert eine benutzerdefinierte Zweig Loader.
Der schwierigste Teil kam mit einer Namenskonvention für die Vorlagen, die garantiert nicht zu überschneidungen mit bestehenden Vorlagen, zum Beispiel
<organisation_slug>!AppBundle:template.html.twig
.Im Falle der Vorlage wurde nicht individuell, Vorlage
AppBundle:template.html.twig
müsste geladen werden, die als fallback-template.Dies ist jedoch nicht möglich mit den Chain-Loader (AFAIK), weil es die template-Namen können nicht geändert werden. Ich musste mich also zu injizieren, der Standard-loader (d.h. der loader-Kette) in meinem loader und verwenden Sie es zu laden, das fallback-template.
Andere Lösung wäre, sich zu übergeben, die Anforderung stack oder die Sitzung zu der Vorlage loader, die es ermöglichen, automatisch zu erkennen die organisation, aber das ist schwierig, weil die security-Komponente hängt von der Template-subsystem, wodurch die zirkuläre Abhängigkeit Probleme.
InformationsquelleAutor der Antwort MauganRa
InformationsquelleAutor der Antwort kiran