Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在symfony2中注册异常侦听器_Php_Symfony_Event Handling - Fatal编程技术网

Php 在symfony2中注册异常侦听器

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

我正在尝试为异常注册侦听器,但它从未被调用,以下是我的代码:

app.yml:

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 }