Symfony 2.2 расширить ExceptionController
этот вопрос связан с следующие изменения (часть выпуска Symfony 2.2):
Часть 1
в pre-2.2 Symfony я переопределял ExceptionController
отображать пользовательские страницы ошибок.
Я сделал это через:
parameters:
twig.exception_listener.controller: MyCustomBundleCustomExceptionController::showAction
теперь, после обновления до 2.2, я больше не могу этого сделать, потому что при создании исключения создается исключение (Не каламбур):
ExceptionController::__construct() должен быть экземпляром Twig_Environment, не заданным, вызываемым...
С ExceptionController
сейчас услуги, как я могу переопределить это, и что мне нужно изменить в моем старом коде?
все, что я сделал в пользовательском классе, изменяется ссылка шаблона в методе showAction:
$template = new TemplateReference('TwigBundle', 'Exception', $name, $format, 'twig');
Часть 2
С ExceptionController
больше не распространяется ContainerAware
, как мне добраться до текущего контейнера? Достаточно ли реализовать ContainerAwareInterface
?
1 ответов
вы должны изменить пару это:
- вам нужно наследование
ExceptionController
в вашем пользовательском контроллере исключений. -
вам нужно переопределить
twig.controller.exception.class
параметр. Как вы можете видеть в файл используетtwig.controller.exception.class
параметр для идентификации класса контроллера исключений. Теперь переопределите его своим классом:parameters: twig.controller.exception.class: My\CustomBundle\CustomExceptionController
-
вам нужно отредактировать подпись the
showAction
следуя новая подписьС
ExceptionController
больше не распространяетсяContainerAware
, как мне добраться до текущего контейнера? Достаточно ли реализоватьContainerAwareInterface
?
нет, услуги не должен никогда укол в контейнер. Вы должны ввести службы, которые вам нужны в конструкторе, как это делается с Twig_Environment
сервис.
внутри вашего контроллера исключений вы получаете доступ к $this->twig
свойство для службы twig. И новая подпись получает $request
параметр, чтобы получить запрос. Не думаю, что тебе нужно больше. (вы также получаете $this->debug
)