2015-07-24 2 views
0

Я пытаюсь понять, как создать событие Listener в Symfony и как оно работает.Symfony EventListener Как это точно работает

поэтому я просмотрел примеры calss из Symfony Docs.

<?php 

// src/AppBundle/EventListener/AcmeExceptionListener.php 
namespace AppBundle\EventListener; 

use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; 
use Symfony\Component\HttpFoundation\Response; 
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface; 

class AcmeExceptionListener 
{ 
    public function onKernelException(GetResponseForExceptionEvent $event) 
    { 
// You get the exception object from the received event 
     $exception = $event->getException(); 
     $message = sprintf(
      'My Error says: %s with code: %s', 
      $exception->getMessage(), 
      $exception->getCode() 
     ); 

// Customize your response object to display the exception details 
     $response = new Response(); 
     $response->setContent($message); 

// 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(Response::HTTP_INTERNAL_SERVER_ERROR); 
     } 

// Send the modified response object to the event 
     $event->setResponse($response); 
    } 
} 

Я понимаю, что $event->getException() из класса GetResponseForExceptionEvent выбирает throwns событие в моем приложении

Что я не тихо понять, как это почему $exception может использовать getMessage()and getCode(). Может кто-нибудь кратко объяснить это мне и, возможно, немного больше о Слушателе событий Symfony.

ответ

2

Это огромная тема, и мне было трудно понять, когда я изучал ее через документацию по Symfony и другие онлайн-блоги. Я порекомендую вам посмотреть учебник this из университета KNP и поверьте, у вас будет очень четкое понимание этого.

+0

Я должен признать, что вы на 100% прав, мне очень тяжело найти хорошо объясненную документацию для слушателей для SYmfony. Ссылка, которую вы мне прислали, поистине потрясающе благодарит вас. Answerd много вопросов у меня было – John

+0

Рад я мог помочь :) Поверь мне, я был рад также встретить КНП. – Baig

0

Последний вопрос сначала.

почему $exception можно использовать getMessage() и getCode()

Symfony является основой, которые используют строгий Objcet ориентированной парадигмы. Так oftenly функция:

  • имел тип объекта аргумент,
  • возврата также объект
  • и объект также может иметь свою собственную функцию и свойства

В этом примере для простоты может думать, $exception - это объект Exception, который имеет свойства, которые можно найти в here.

Также, чтобы понять, как работают слушатели, это поможет, если у вас есть некоторые сведения о «Шаблон проектирования наблюдателя». Это объяснение litle.

  • есть объект, называемый диспетчер (EventDispatcher)
  • этого объекта был массив содержит много слушателей объект
  • в момент времени ядра сообщил диспетчер о доставке
  • и диспетчер сказал всему слушатель выполнять функции, если существует

И для понимания кода, вы создаете слушатель, что активный когдаException выбрасывается из любого места. Поэтому вы можете выбрать или не показывать свое сообщение об ошибке.

1

Это не имеет ничего общего с Symfony Events, когда вы используете $event->getException, вы получаете экземпляр класса Exception, этот класс имеет эти методы.

+0

Я согласен с вами, и я знаю это, но как это делается. – John

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