Diese Frage bezieht sich auf die folgende Änderung (Teil von Symfony 2.2):
Teil 1
In Symfony vor Version 2.2 habe ich ExceptionController
überschrieben, um einige benutzerdefinierte Fehlerseiten anzuzeigen.
Ich habe das über:
gemacht %Vor%Nun, nach dem Upgrade auf 2.2, kann ich das nicht mehr machen, weil beim Erzeugen einer Ausnahme eine Ausnahme ausgelöst wird (kein Wortspiel beabsichtigt):
ExceptionController :: __ construct () muss eine Instanz von Twig_Environment sein, keine Angabe, aufgerufen in ...
Da ExceptionController
jetzt ein Service ist, wie kann ich das überschreiben und was muss ich in meinem alten Code ändern?
Alles, was ich in der benutzerdefinierten Klasse getan habe, ist die Template-Referenz in der showAction-Methode:
%Vor%Teil 2
Da ExceptionController
nicht länger ContainerAware
verlängert, wie komme ich zum aktuellen Container? Reicht es aus, ContainerAwareInterface
zu implementieren?
Sie sollten ein paar davon ändern:
ExceptionController
in Ihrem benutzerdefinierten Exception-Controller erben. Sie müssen den Parameter twig.controller.exception.class
überschreiben. Wie Sie in der Servicedatei sehen können, wird der Parameter twig.controller.exception.class
verwendet, um die Exception-Controller-Klasse zu identifizieren . Überschreibe es jetzt mit deiner Klasse:
Sie müssen die Signatur von showAction
bearbeiten, um der neuen Signatur zu folgen >
Da
ExceptionController
nicht längerContainerAware
verlängert, wie komme ich zum aktuellen Container? Reicht es aus,ContainerAwareInterface
zu implementieren?
Nein, Dienste sollten nie den Container injizieren. Sie sollten die benötigten Dienste in den Konstruktor einfügen, wie es mit dem Twig_Environment
-Dienst geschieht.
Innerhalb Ihres Exception-Controllers erhalten Sie Zugriff auf die Eigenschaft $this->twig
für den Zweigdienst. Und die neue Signatur erhält einen $request
Parameter, um die Anfrage zu bekommen. Ich glaube nicht, dass du mehr brauchst. (Sie erhalten auch $this->debug
)
Tags und Links php exception-handling symfony symfony-2.2