Skip to content

Reorder page from simple to advanced (rebased) #3928

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 5 commits into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 37 additions & 13 deletions cookbook/controller/error_pages.rst
Original file line number Diff line number Diff line change
Expand Up @@ -14,20 +14,12 @@ the status code that should be set for the given exception.
Error pages can be customized in two different ways, depending on how much
control you need:

1. Customize the error templates of the different error pages (explained below);
1. Customize the error templates of the different error pages;

2. Replace the default exception controller ``twig.controller.exception:showAction``
with your own controller and handle it however you want (see
:ref:`exception_controller in the Twig reference <config-twig-exception-controller>`).
The default exception controller is registered as a service - the actual
class is ``Symfony\Bundle\TwigBundle\Controller\ExceptionController``.
2. Replace the default exception controller ``twig.controller.exception:showAction``.

.. tip::

The customization of exception handling is actually much more powerful
than what's written here. An internal event, ``kernel.exception``, is thrown
which allows complete control over exception handling. For more
information, see :ref:`kernel-kernel.exception`.
The default ExceptionController
-------------------------------

The default ``ExceptionController`` will either display an
*exception* or *error* page, depending on the setting of the ``kernel.debug``
Expand All @@ -43,9 +35,12 @@ shown to the end-user.

The third-party `WebfactoryExceptionsBundle`_ provides a special
test controller that allows you to display your custom error
pages for arbitrary HTTP status codes even with
pages for arbitrary HTTP status codes even with
``kernel.debug`` set to ``true``.

Override Error Templates
------------------------

All of the error templates live inside the TwigBundle. To override the
templates, simply rely on the standard method for overriding templates that
live inside a bundle. For more information, see
Expand Down Expand Up @@ -129,3 +124,32 @@ Symfony uses the following algorithm to determine which template to use:
``exception.json.twig`` for the JSON exception page.

.. _`WebfactoryExceptionsBundle`: https://github.com/webfactory/exceptions-bundle

Replace the default Exception Controller
----------------------------------------

If you need a little more flexibility beyond just overriding the template
(e.g. you need to pass some additional variables into your template),
then you can override the controller that renders the error page.

The default exception controller is registered as a service - the actual
class is ``Symfony\Bundle\TwigBundle\Controller\ExceptionController``.

To do this, create a new controller class and make it extend Symfony's default
``Symfony\Bundle\TwigBundle\Controller\ExceptionController`` class.

There are several methods you can override to customize different parts of how
the error page is rendered. You could, for example, override the entire
``showAction`` or just the ``findTemplate`` method, which locates which
template should be rendered.

To make Symfony use your exception controller instead of the default, set the
:ref:`twig.exception_controller <config-twig-exception-controller>` option
in app/config/config.yml.

.. tip::

The customization of exception handling is actually much more powerful
than what's written here. An internal event, ``kernel.exception``, is thrown
which allows complete control over exception handling. For more
information, see :ref:`kernel-kernel.exception`.