我已经看了很多方法来做到这一点,但无法找到解决方案。
我希望我的网站在发生异常时显示特定的路线/页面。
所以,如果我将其设置为显示路线'contact'并且我转到domain.com/dfergerxyttt(找不到路由)那么它就像我去了domain.com/route一样(除了404状态代码)。
我需要这些关键的东西: (1)我需要像往常一样运行控制器代码 (2)我还需要它来运行我的Request事件监听器代码
我不能只设置它来显示一个特定的模板,它必须是整个请求 - 事件 - 监听器和控制器等过程。
我尝试了一个异常监听器,但它也不会运行请求监听器。所有代码都被忽略了。
我无法找到一种方法来设置一个包罗万象的路线或任何东西。设置默认路径或全能路线是一个好主意。
-
我试过这个,但我无法访问控制器。不知道我是否需要注入它或其他东西:
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')
{
$httpKernel = $this->container->get('kernel');
$response = $httpKernel->forward('AcmeMyBundle:Default:pageAction');
$this->setResponse(new Response($response));
}
}
我也在services.yml中做过这个,看起来似乎是正确的:
parameters:
twig.controller.exception
class: Acme\MyBundle\MyExceptionController
答案 0 :(得分:0)
创建一个异常控制器并使用Controller::forward
转发到特定路由。
请参阅此答案,了解如何在2.2中创建例外控制器:https://stackoverflow.com/a/15773923/1149495