如何在Symfony2.3中获取NotFoundException而不是MethodNotAllowedException?

时间:2014-03-21 09:03:47

标签: routing symfony-2.3

我有一个控制器的方法注释如下:

/**
 * @Route("/document/remove/", name="document_remove", requirements={"id"="^\d+$"}, defaults={"_format"="json"})
 * @Method({"DELETE"})
 */
public function removeDocumentAction(Request $request)

如果我尝试打开" / document / remove /"我的浏览器中的网址(GET请求),我看到MethodNotAllowedException。这是对的,但我希望得到一个NotFoundException。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

您需要编写一个事件监听器。您将订阅内核异常。检查异常是否为MethodNotAllowedException,然后将其转换为NotFoundException。

//Your Event Listener
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;

class ExceptionListener
{
    public function onKernelException(GetResponseForExceptionEvent $event)
    {
        $exception = $event->getException();

        if (!($exception instanceof MethodNotAllowedException)) {
            return;
        }

        $response = new Response($exception->getMessage(),404);

        $event->setResponse($response);
    }
}

查看有关如何创建和注册事件监听器的Symfony Documentation