繁体   English   中英

服务内部Symfony Throw自定义404页面

[英]Symfony Throw custom 404 page inside service

我需要在服务内部抛出异常

        $isLangExist = $this->em->getRepository('TranslationBundle:Language')->findOneBy(array(
        'locale' => $this->request->getMasterRequest()->getLocale()
    ));
    if (!$isLangExist) {
        throw new createNotFoundException('you are using unavailable langage');
    }

但我知道此页面在prod env中不起作用

如何显示带有createNotFoundException或其他任何异常类型的404页面

谢谢

看起来您的代码不正确。 我希望它看起来像这样:

if (!$isLangExist) {
    throw $this->createNotFoundException('you are using unavailable langage');
}

该方法是您可以使用的抽象基本控制器的一部分,但不是强制性的。 在不扩展此控制器的情况下应该工作的是:

if (!$isLangExist) {
    throw new NotFoundHttpException('you are using unavailable langage');
}

您的问题超出了上面的代码,因为您没有像我期望的那样在控制器内引发异常。 您将其扔到Twig扩展中。 此异常将中断渲染,因此,该错误不会转换为404异常,而是被视为500错误。 每当其中一个查询失败时,您的扩展名可能还会看到其他500错误,这可能不是您想要的。 解决此问题可能需要重新考虑如何使用这些全局树枝变量。

您可以尝试将使用这些变量的模板移到由专用控制器使用子请求或ESI呈现的单独模板中:

{{
    render(controller(
        'AppBundle:Global:_listCategories',
        {
            'locale': app.request.attributes.get('_locale')
        }
    ))
}}

另一个解决方案可能是,每当发生故障时,将它们设置为null或错误对象,然后对模板中的这些“替代”结果做出反应,这不是我想要的。

可能还有许多其他方法可以解决此问题。 要点是:呈现错误与控制器服务引发的http异常不同。 您必须确保尽管存在这些丢失/错误的变量也可以呈现模板,或者在呈现模板之前(例如在事件侦听器中)处理这些缺失的参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM