[英]Can't get Exception Controller working - Symfony2
namespace etc...
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Bundle\TwigBundle\Controller\ExceptionController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\HttpKernel;
use Symfony\Component\HttpKernel\Exception\FlattenException;
use Symfony\Component\HttpKernel\Log\DebugLoggerInterface;
use Symfony\Component\HttpFoundation\Response;
class MyExceptionController extends ExceptionController
{
public function showAction(Request $request, FlattenException $exception, DebugLoggerInterface $logger = null, $format = 'html')
{
}
}
控制器内部不执行任何操作都会返回“未捕获的异常'Symfony \\ Component \\ Routing \\ Exception \\ ResourceNotFoundException in ...”错误。 不知道这是正确的,还是另一个问题。 我希望它能照常执行。
我只需要这样做,就可以显示与我进入domain.com/page时完全一样的指定路由。
我已经试过了:
$httpKernel = $this->container->get('kernel');
$response = $httpKernel->forward('AcmeMyBundle:Default:pageAction');
$this->setResponse(new Response($response));
...但是出现此错误:
Call to a member function get() on a non-object in...
您的代码看起来类似于我昨天所做的事情。 我想获取所有NotFoundHttpException异常,然后尝试将它们转发到默认控制器。 我通过这样的异常监听器实现了这一点:
<?php
namespace Acme\MyBundle\Listener;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
class NotFoundHttpExceptionListener
{
protected $container;
public function setContainer($container)
{
$this->container = $container;
}
public function onKernelException(GetResponseForExceptionEvent $event)
{
$exception = $event->getException();
if ($exception instanceof NotFoundHttpException) {
$httpKernel = $this->container->get('http_kernel');
$response = $httpKernel->forward(
'AcmeMyBundle:Controller:action',
array(
'uri' => $_SERVER['REQUEST_URI'],
)
);
$response->headers->set('X-Status-Code', '200');
$event->setResponse($response);
$event->stopPropagation();
}
}
}
请注意,如果要返回除404以外的其他状态码,则X-Status-Code是必需的,因为HttpKernel中的handleException方法将使用它来设置最终状态码并将其从标头部分中删除。
我的services.yml看起来像这样:
notfoundhttp.exception.listener:
class: Acme\MyBundle\Listener\NotFoundHttpExceptionListener
calls:
- [ setContainer, [@service_container] ]
tags:
- { name: kernel.event_listener, event: kernel.exception, method: onKernelException }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.