Symfony 2.2 extendController erweitern

8

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?

    
isyndicate 02.04.2013, 20:00
quelle

1 Antwort

12

Sie sollten ein paar davon ändern:

  1. Sie müssen das ExceptionController in Ihrem benutzerdefinierten Exception-Controller erben.
  2. 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:

    %Vor%
  3. Sie müssen die Signatur von showAction bearbeiten, um der neuen Signatur zu folgen >

      

    Da ExceptionController nicht länger ContainerAware 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 )

    
Wouter J 02.04.2013, 20:40
quelle