
Создание страницы ошибки 404 в symfony (создание контроллера)
У меня есть уже созданный "AppBundle" бандл и в нем есть папка controller в которой будут контроллеры. Регистрируем контроллер в сервисах config.yml, прописываем настройки и путь к контроллеру:
# Это писать в версии symfony 2.2 !!! и выше twig: exception_controller: my.twig.controller.exception:showAction # Это писать в версии symfony 2.1 !!! twig: exception_controller: AppBundle\Controller\ExceptionController:showAction services: my.twig.controller.exception: class: AppBundle\Controller\ExceptionController arguments: ['@twig', '%kernel.debug%', '@service_container']
Где class прописываем путь к нашему классу контроллеру который будем потом создавать в бандле:
И указываем функцию в контроллере ExceptionController, которая будет работать при переходе страницы: :showAction
Сам контроллер ссылается в указанных twig параметрах по названию сервиса:
В аргументах написал входящие параметры в конструкцию класса ExceptionController:
После того как прописали пути и настройки к контроллеру в yml, переходим к созданию самого контроллера ExceptionController по пути AppBundle\Controller :
namespace FrontBundle\Controller; use Symfony\Component\Debug\Exception\FlattenException; use Symfony\Component\HttpKernel\Log\DebugLoggerInterface; use Symfony\Component\HttpFoundation\Response; use Symfony\Bundle\TwigBundle\Controller\ExceptionController as BaseExceptionController; use Symfony\Component\HttpFoundation\Request; use Twig\Environment; class ExceptionController extends BaseExceptionController { private $container; public function __construct(Environment $twig, $debug, $container) { parent::__construct($twig, $debug); $this->container = $container; } public function showAction(Request $request, FlattenException $exception, DebugLoggerInterface $logger = null, $format = 'html') { $currentContent = $this->getAndCleanOutputBuffering($request->headers->get('X-Php-Ob-Level', -1)); $showException = $request->attributes->get('showException', $this->debug); // As opposed to an additional $code = $exception->getStatusCode(); if($code != '404' && $code == ''){ $code = '404'; } $responce = new Response($this->twig->render( '@Front/Exception/error'.$code.'.html.twig', [ 'status_code' => $code, 'status_text' => isset(Response::$statusTexts[$code]) ? Response::$statusTexts[$code] : '', 'exception' => $exception, 'logger' => $logger, 'currentContent' => $currentContent, ] ), 200, ['Content-Type' => $request->getMimeType($request->getRequestFormat()) ?: 'text/html']); return $responce; } }
Для отображения 404 ошибки укажем путь к шаблону @Front/Exception/error'.$code.'.html.twig и передадим туда переменные
Вот и все, теперь при переходе на не правильную страницу срабатывает этот контроллер