Symfony 2.0.3 Globale Vorlagenvariable
Ich habe ein Unternehmen, ich wollen, um eine Verbindung mit der Benutzer-session.
Ich habe einen Dienst, so dass ich erreichen konnte, diese info von wo auch immer.
in der service, den ich speichern die Personen-id in eine session-variable
und in der getEntity()
Methode bekomme ich die session-variable und mit der Lehre finden Sie die Entität, und es zurückgeben.
diese Weise an der Vorlage, ich sollte in der Lage sein zu rufen {{ myservice.myentity.myproperty }}
Das problem ist, dass myservice ist alle über dem Platz, und das möchte ich nicht haben, um es in jedem da-Aktion, und fügen Sie es auf die view-array.
Gibt es eine Möglichkeit einen Dienst zugänglich von allen Ansichten wie in der Sitzung {{ app.session }}
?
InformationsquelleAutor der Frage Leon Radley | 2011-10-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Lösung
Durch die Erstellung einer benutzerdefinierten service, den ich bekommen kann, von wo auch immer durch die Verwendung
all dies geschieht durch http://symfony.com/doc/current/book/service_container.html
Aber ich werde Ihnen einige demo-code.
Der Service
Dieser erste Ausschnitt ist die eigentliche Leistung
Registrieren Sie es in Sie
config.yml
mit sowasNun können wir, wie ich schon sagte, bekommen die service in unseren Controllern mit
Aber da dies eine Globale service wollte ich nicht haben, dies zu tun in jeder controller und jede Aktion
so, jetzt gehen wir erstellen ein Twig_Extension
Twig Erweiterung
Durch die Verwendung von dependency injection haben wir jetzt die AppState Service, den wir erstellt, in der twig-Erweiterung namens appstate
Jetzt registrieren wir, dass mit dem symfony (wieder innerhalb der
services
Abschnitt innerhalb der config-Datei)Wichtigen Teil der "tags", denn dies ist, was symfony verwendet, um zu finden, die alle Zweig-Erweiterungen
Sind wir nun verwenden Sie unser appstate in unserem Zweig-Vorlagen durch den Namen der Variablen
oder
Genial!
InformationsquelleAutor der Antwort Leon Radley
Vielleicht können Sie versuchen, diese in Ihrem handeln ? $this->container->get('Template')->addGlobal($name, $value)
InformationsquelleAutor der Antwort benjaming