Zweig - Funktion in Vorlage übergehen
Derzeit Stelle ich meine Funktion in eine Klasse, und übergeben Sie eine Instanz dieser Klasse in das template und rufe meine gewünschte Funktion als Methode einer Klasse.
{{ unneededclass.blah() }}
Muss ich tun, wie unten
{{ blah() }}
Ist es möglich?
InformationsquelleAutor der Frage StoneHeart | 2010-08-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Update 5/14/2015
Kommentatoren weisen darauf hin, dass ich meistens falsch. Wenn Sie wirklich brauchen eine Funktion und nicht einen filter oder ein makro, können Sie es tun, wie vorgeschlagen, in den Zweig docs:
Und wie
Kurz gesagt, Nein, das ist nicht möglich.
Jedoch, die Hoffnung ist nicht verloren!
Filter
Wenn diese Funktion
blah()
von dir gemeint ist, zum ändern einer bestehenden variable, dann ist es ein filter.Beispiel:
(Das erste argument ist die variable, die Sie filtern, die zweite versorgt wird, mit normalen Mitteln)
Makros
Wenn, wie Sie oben angegeben ist, ist Ihre Funktion einfach-Ausgänge HTML, dann ist es ein guter Kandidat für eine makro.
Beispiel:
Oder mit Parametern:
Warum?
Die Sache zu erinnern ist, dass Twig-templates stellen eine Ansichtim Sinne von MVC. Das bedeutet, Sie sind isoliert in Bezug auf Ihre Umwelt und können nur für die Kontext passieren Sie Ihnen über das Daten-array übergeben Sie den
$template->render()
Methode.Dies ist eine gute Sache, da es entkoppelt die Präsentation von Ihrem Logik und Daten. Wenn Sie können beliebig Funktionen aufrufen, dann werden Sie plötzlich zu erhöhen, die Kopplung, die eine bad Sache.
Der andere Grund ist die Art, wie PHP behandelt Rückrufe. Überlegen Sie, wie Sie, müsste passieren, dass die Funktion in dein template... Wahrscheinlich so etwas wie dieses:Im template, wird die Kontext-variableblah
ist jetzt nur ein string mit'blah'
.In vanilla PHP, wenn Sie verwenden der variable Funktionen wie diese (versuchen, eine string-variable wie eine Funktion), es (mehr oder weniger) führt eine Suche für diese Funktion, dann ruft es. Sie sind nicht übergeben der Funktion, nur Ihren Namen.Die Sache ist, Sie können möglicherweise passieren eine Funktion in einem template, weil PHP nur Mechanismus, dies zu tun ist durch name-string und einmal in einer Vorlage, der name ist nicht mehr eine Funktion-name und einfach nur ein string.Etwas langatmig, aber ich hoffe, das hilft!
Wenn du mehr willst Dokumentation, die offiziellen docs sind hier.
InformationsquelleAutor der Antwort Austin Hyde
War ich, wie verloren du warst mein Freund, aber nach der Suche im web nach einer Antwort und fand keine, die ich beschlossen, um zu sehen, wenn ich könnte es selbst tun. Deshalb wollte ich post meine Lösung hier (auch wenn ich weiß, dieser Beitrag ist alt), weil das der erste Treffer auf google, wenn Sie suchen, für dieses problem.
Hier es gehen, es ist eigentlich ganz einfach:
Machte ich eine Klasse, die enthält meine Funktionen und Variablen, zum Beispiel:
So, jetzt haben wir $Werte als array, enthält dieses Objekt mit einer Funktion "getRandomNumber()".
Beim Rendern der template-Datei haben, gehören dieser Klasse als Wert:
Diese Weise, innerhalb der template-Datei haben, können Sie einfach diese Methode aufrufen, um die Funktion aufrufen und erhalten Ihr Ergebnis:
InformationsquelleAutor der Antwort Corrensanders
Obwohl Sie nicht PHP callable direkt, Zweig erweiterbar ist. Sie können hinzufügen, eine aufrufbare filter, so dass Sie anwenden können, um PHP-Funktionen übergeben werden template.
Nun, wenn Sie pass variable
my_func
auf die Vorlage, die Sie tun könnenmy_func|call(arg1, arg2)
. Sie können sogar noch höherer Ordnung Funktionen"array_filter"|call(my_array, my_func)
und Sie können immer mehr tun können, im filter, wie die Annahme-array als Parameter und so weiter.InformationsquelleAutor der Antwort Plamen Dragiyski
Volle Antwort:
http://twig.sensiolabs.org/doc/advanced.html#id2
Ich bevorzuge die Twig Erweiterung wie diese:
In der Vorlage:
InformationsquelleAutor der Antwort merqlove
Mit Anonyme Klasse
Erstellen anonymen Klasse, in manager/- controller/service ..
Fügen Sie parameter in den Blick
Benutzen Sie die Funktion im Hinblick
InformationsquelleAutor der Antwort Ajsti.pl - Maciej Szewczyk