2015-04-05 2 views
1

Я пытаюсь создать страницу пользовательских ошибок в symfony2: Я следил за этим tuto. Однако он показывает мне это:Пользовательская страница ошибки InvalidArgumentException Symfony2

InvalidArgumentException in YamlFileLoader.php line 145: A service definition must be an array or a string starting with "@" but NULL found for service "kernel.listener.allotaxi_exception_listener" in services.yml. Check your YAML syntax. 

мой services.yml:

services: 
    kernel.listener.allotaxi_exception_listener: 
    class: AlloTaxi\AlloTaxiBundle\Listener\ExceptionListener 
    arguments: [@templating, @kernel] 
    tags: 
     - { name: kernel.event_listener, event: kernel.exception, method: onKernelException } 

ExceptionListener.php:

namespace AlloTaxi\AlloTaxiBundle\Listener; 
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; 
use Symfony\Component\HttpFoundation\Response; 
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface; 

use Symfony\Bundle\FrameworkBundle\Templating\EngineInterface; 
class ExceptionListener { 

    protected $templating; 
    protected $kernel; 

    public function __construct(EngineInterface $templating, $kernel) 
    { 
     $this->templating = $templating; 
     $this->kernel = $kernel; 
     } 

     public function onKernelException(GetResponseForExceptionEvent $event) 
     { 
     // provide the better way to display a enhanced error page only in prod environment, if you want 
     if ('prod' == $this->kernel->getEnvironment()) { 
     // exception object 
     $exception = $event->getException(); 

     // new Response object 
     $response = new Response(); 

     // set response content 
     $response->setContent(
      // create you custom template AcmeFooBundle:Exception:exception.html.twig 
      $this->templating->render(
       'AlloTaxiBundle:Exception:error.html.twig', 
       array('exception' => $exception) 
      ) 
     ); 

     // HttpExceptionInterface is a special type of exception 
     // that holds status code and header details 
     if ($exception instanceof HttpExceptionInterface) { 
      $response->setStatusCode($exception->getStatusCode()); 
      $response->headers->replace($exception->getHeaders()); 
     } else { 
      $response->setStatusCode(500); 
     } 

     // set the new $response object to the $event 
     $event->setResponse($response); 
    } 
} 
} 

Любая идея, что это может быть? Я последовал именно тогда, когда он это сделал.

ответ

1
services: 
    kernel.listener.allotaxi_exception_listener: 
     class: AlloTaxi\AlloTaxiBundle\Listener\ExceptionListener 
     arguments: [@templating, @kernel] 
     tags: 
     - { name: kernel.event_listener, event: kernel.exception, method: onKernelException } 

Глядя на файл services.yml публикуемом в вашем вопросе, вам не хватает уровень отступа для «класса», «аргументы» & «метки». Они выглядят на том же уровне, что и имя вашей службы «kernel.listener.allotaxi_exception_listener»

Посмотрите на определение службы выше, обратите внимание на отступ между именем службы и классом, аргументы & тегов.

При работе с yml-файлами нужно быть осторожным относительно правильной иерархии

+0

Да, все. благодаря –

Смежные вопросы