Создание страницы ошибки 404 в symfony (создание контроллера)
Вернуться назад
9

Создание страницы ошибки 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 прописываем путь к нашему классу контроллеру который будем потом создавать в бандле: 

- class: AppBundle\Controller\ExceptionController

И указываем функцию в контроллере ExceptionController, которая будет работать при переходе страницы: :showAction

Сам контроллер ссылается в указанных twig параметрах по названию сервиса:

- my.twig.controller.exception

В аргументах написал входящие параметры в конструкцию класса ExceptionController:

- arguments: ['@twig', '%kernel.debug%', '@service_container']

После того как прописали пути и настройки к контроллеру в 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 и передадим туда переменные

Вот и все, теперь при переходе на не правильную страницу срабатывает этот контроллер

создано:
05.09.2020
обновлено:
22.04.2023
автор:
admin
Теги
yandex metrika