2013-05-22 3 views
2

Я следил за Symfony2.2 documentation on customising error templates и переопределял шаблон ошибки по умолчанию на app/Resources/TwigBundle/views/Exception/error.html.twig, как описано для Twig.Почему исключения не попадают при переопределении шаблонов ошибок?

В некоторых контроллерах я бросаю пользовательский 404, когда сущность DB не существует, например. Я делаю это с:

throw $this->createNotFoundException('Thing not found'); 

Когда мой пользовательский шаблон существует такое исключение не поймали, так что моя страница ошибки никогда не оказанной, и я получаю фатальную ошибку. Я ничего не изменил для обработчиков исключений, поэтому я не понимаю, почему переопределение шаблона нарушает функциональность рендеринга ошибок Symfony.

Выполняется, как правило, контроллер showAction диспетчера исключений, но исключение все еще выбрасывается из стека.

Что нужно сделать для того, чтобы исключение было поймано и оказано?

Дополнительная информация:

Записано. (Изменено имя только клиента)

[2013-05-22 16:26:22] request.INFO: Matched route "show_thing" (parameters: "_controller": "Client\SiteBundle\Controller\ThingController::indexAction", "id": "thing", "_route": "show_thing") [] [] 
[2013-05-22 16:26:22] security.INFO: No expression found; abstaining from voting. [] [] 
[2013-05-22 16:26:22] request.ERROR: Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: "thing not found" at /home/vhosts/client/symfony/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Controller/Controller.php line 149 [] [] 
+0

Просто, чтобы уточнить ... если ваш шаблон существует ... исключение не уловлено ... если оно не существует ... symfony показывает страницу ошибки 404 правильно? Проверяли ли вы свои лог-файлы, если есть вероятность исключения при изменении шаблона? – nifr

+0

app/Resources/TwigBundle/views/Exception/error404.html.twig thats созданный вами файл? – nifr

+0

Я пробовал с error.html.twig и error404.html.twig. Повторите свое разъяснение: да. Он отлично работает, если я удалю свой настраиваемый шаблон. – Tim

ответ

3

Я разработал его.

У моего шаблона был блок, который не был определен в макете.

Эта ошибка не был зарегистрирован, но было достаточно, чтобы сломать рендеринг,

Благодаря @nifr за вашу помощь.

0

Ваша проблема относится к createNotFoundException метода в контроллере симфони.

Symfony API - Symfony/Bundle/FrameworkBundle/Controller/Controller

Code on GitHub

Чтобы действительно показать пользовательский шаблон ошибки необходимо использовать Symfony в прод среде, так как исключения только пойманы там.

В среде Dev Symfony используется собственный модифицированный обработчик ошибок php для отображения stacktrace. Эти исключения не вылавливаются, как показано обработчиком ошибок.

Вы проверили, что прослушиватель исключительных явлений ядра правильно зарегистрирован в контейнере службы?

app/console container:debug --show-private 
+0

yeh, я переключаю свой фронт-контроллер на prod, чтобы проверить шаблоны. – Tim

+0

'$ console container: debug --show-private | grep exception' – Tim

+0

'twig.controller.exception container Symfony \ Bundle \ TwigBundle \ Controller \ ExceptionController' – Tim