Я пытаюсь использовать пользовательский контроллер для обработки исключений в моем проекте Symfony 2.7, но я получаю эту ошибку: Type error: Too few arguments to function Symfony\Bundle\TwigBundle\Controller\ExceptionController::__construct()
Я установил класс исключения следующим образом:
twig:
exception_controller: MyProject\MainBundle\Controller\MyProjectExceptionController::showException
Я знаю, что должен настроить службу для передачи правильных аргументов в конструктор.Итак, у меня есть следующая конфигурация в config.yml:
services:
myproject.twig.controller.exception:
class: MyProject\MainBundle\Controller\MyProjectExceptionController
arguments: [@twig, %kernel.debug%]
Я прочитал ответы многих SO на эту тему и увидел, что между версиями Symfony есть некоторые изменения в этой конфигурации.Я также пробовал app.configuration_exception
и некоторые другие варианты.
Кто-нибудь знает, какова правильная конфигурация специально для Symfony 2.7?
Редактировать
Ответ @Constantin:
На самом деле я все еще проводил начальные тесты.Поэтому я в основном скопировал ExceptionControler от Twig и удалил все, кроме showAction, и включил переменную тестовой среды, чтобы проверить, все ли работает нормально.Это результат:
<?php
namespace MyProject\MainBundle\Controller;
use Symfony\Bundle\TwigBundle\Controller\ExceptionController;
use Symfony\Component\HttpKernel\Exception\FlattenException;
use Symfony\Component\HttpKernel\Log\DebugLoggerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
//use Symfony\Bundle\FrameworkBundle\Templating\TemplateReference;
//use Symfony\Component\Templating\TemplateReferenceInterface;
//use Twig\Environment;
//use Twig\Error\LoaderError;
//use Twig\Loader\ExistsLoaderInterface;
class MyProjectExceptionController extends ExceptionController {
public function showAction(Request $request, FlattenException $exception, DebugLoggerInterface $logger = null)
{
$currentContent = $this->getAndCleanOutputBuffering($request->headers->get('X-Php-Ob-Level', -1));
$showException = $request->attributes->get('showException', $this->debug); // As opposed to an additional parameter, this maintains BC
$code = $exception->getStatusCode();
return new Response($this->twig->render(
(string) $this->findTemplate($request, $request->getRequestFormat(), $code, $showException),
array(
'status_code' => $code,
'status_text' => isset(Response::$statusTexts[$code]) ? Response::$statusTexts[$code] : '',
'exception' => $exception,
'logger' => $logger,
'currentContent' => $currentContent,
'test' => "TEST"
)
), 200, array('Content-Type' => $request->getMimeType($request->getRequestFormat()) ?: 'text/html'));
}
}