Php 在symfony2中注册异常侦听器
我正在尝试为异常注册侦听器,但它从未被调用,以下是我的代码: app.yml:Php 在symfony2中注册异常侦听器,php,symfony,event-handling,Php,Symfony,Event Handling,我正在尝试为异常注册侦听器,但它从未被调用,以下是我的代码: app.yml: services: kernel.listener.exception_listener: class: Appointmed\ApiBundle\EventListener\AppointmedExceptionEventListener tags: - { name: kernel.event_listener, event: kernel.exce
services:
kernel.listener.exception_listener:
class: Appointmed\ApiBundle\EventListener\AppointmedExceptionEventListener
tags:
- { name: kernel.event_listener, event: kernel.exception, method: onKernelException }
Acme/ApiBundle/EventListener/AcmeExceptionEventListener.php
<?php
/**
* Created by PhpStorm.
* User: danielrodriguez
* Date: 28/02/14
* Time: 19:14
*/
namespace Acme\ApiBundle\EventListener;
use JMS\Serializer\Serializer;
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
class AcmeExceptionEventListener
{
public function onKernelException(GetResponseForExceptionEvent $event)
{
// You get the exception object from the received event
$exception = $event->getException();
$status = new Status($exception->getCode(), $exception->getMessage());
// Customize your response object to display the exception details
$response = new Response();
$serializer = SerializerBuilder::create()->build();
$response->setContent($serializer->serialize(array("status" => $status), 'json'));
$response->sendHeaders(array("ContentType" => "application/json"));
// 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);
}
}
在服务定义中,您已将类名指定为“AppointmedExceptionEventListener” 但是您编写的类是命名空间中的AcmeExceptionEventListener
Acme\ApiBundle\EventListener。如果您解决了这个问题,它应该可以正常工作。您是否确认
app\config.yml
包含imports
元素-{resource:services.yml}
,而services.yml
包括您的服务?服务通常通过依赖项注入扩展加载命名空间与service.yml不匹配,您必须使用symfony 2.4来使用Response::HTTP\u INTERNAL\u SERVER\u ERROR
services:
kernel.listener.exception_listener:
class: Appointmed\ApiBundle\EventListener\asdf
tags:
- { name: kernel.event_listener, event: kernel.exception, method: onKernelException }