Symfony php Пользовательский контроллер исключений не работает - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь создать пользовательский контроллер исключений в php Symfony 4. По сути, я хочу сделать так, чтобы маршрут по умолчанию вызывался, когда другие маршруты не совпадают.

Я пытаюсь следовать советам здесь: https://symfony.com/doc/current/controller/error_pages.html#custom-exception-controller

Я создал файл twig.yaml внутри конфигов >> pacakges:

twig:
    exception_controller: App\Controller\ExceptionController::showException

IЯ также создал класс ExceptionController:

<?php
namespace  App\Controller;


use Symfony\Component\HttpFoundation\Response;

class ExceptionController
{

    public function showException()
    {
        $response = new Response();
        $response->setContent("Some random text");
        $response->headers->set('Content-Type', 'text/plain');
        $response->headers->set('Access-Control-Allow-Origin', '*');
        $response->setStatusCode(200);
        return $response;
    }
}

Когда я посещаю несуществующий URL, я ожидаю увидеть текст «Какой-то случайный текст», но вместо этого я получаю страницу симфонии по умолчанию, которая не найдена:

enter image description here

Есть идеи, что я могу делать не так?

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Вы упомянули, что создали twig.yaml в configs/packages.

Две вещи:

  1. Это должно быть config, а не configs
  2. twig.yaml должен уже существовать, нет необходимости создавать этот файл.

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

Как только вы добавите свой пользовательский путь exception_controller к этому существующему (предполагается по умолчанию) twig.yaml, он должен выглядеть примерно так:

twig:
    default_path: '%kernel.project_dir%/templates'
    debug: '%kernel.debug%'
    strict_variables: '%kernel.debug%'
    exception_controller: App\Controller\ExceptionController::showException

Я протестировал это с новой установкой, и она работает как положено.

Надеюсь, это поможет:)


Ваш метод должен быть вызванshowException, а не endpoint, как вы определили в вашей twig.exception_controller конфигурации.

0 голосов
/ 28 сентября 2018

Вы пытались использовать маршрутизацию для маршрутов? Укоренение

...