如何在symfony 3.1中自定义错误页面模板?

时间:2016-10-26 08:45:21

标签: symfony error-handling

我正在使用Symfony 3.1。我确实按照以下网址来实现自定义错误页面模板。

http://symfony.com/doc/current/controller/error_pages.html#custom-exception-controller)。

我在同一位置创建所有文件:

app/
└─ Resources/
   └─ TwigBundle/
      └─ views/
         └─ Exception/
            ├─ error404.html.twig
            ├─ error403.html.twig
            ├─ error.html.twig      # All other HTML errors (including 500)
            ├─ error404.json.twig
            ├─ error403.json.twig
            └─ error.json.twig      # All other JSON errors (including 500)

我创建了一个名为“TwigBundle”的包,并创建名为“TwigBundle \ Controller \ ExceptionController.php”的控制器文件夹和类

Config.yml

Twig配置

twig:    
    exception_controller:  TwigBundle:ExceptionController:showException

error.html.twig

    <h1>Page not found</h1>

    {% if is_granted('IS_AUTHENTICATED_FULLY') %}
        {# ... #}
    {% endif %}

    <p>
        The requested page couldn't be located. Checkout for any URL
        misspelling or <a href="{{ path('homepage') }}">return to the homepage</a>.
    </p>

In case you need them, the Ex

我收到以下错误消息:

Fatal error: Uncaught exception 'Symfony\Component\Routing\Exception\ResourceNotFoundException' in D:\xampp\htdocs\PROJECT_NAME\var\cache\prod\appProdUrlMatcher.php:922 Stack trace: #0 D:\xampp\htdocs\PROJECT_NAME\var\cache\prod\classes.php(1744): appProdUrlMatcher->match('/jkhjjkohuioioi...') #1 D:\xampp\htdocs\PROJECT_NAME\var\cache\prod\classes.php(1613): Symfony\Component\Routing\Matcher\UrlMatcher->matchRequest(Object(Symfony\Component\HttpFoundation\Request)) #2 D:\xampp\htdocs\PROJECT_NAME\var\cache\prod\classes.php(2758): Symfony\Component\Routing\Router->matchRequest(Object(Symfony\Component\HttpFoundation\Request)) #3 [internal function]: Symfony\Component\HttpKernel\EventListener\RouterListener->onKernelRequest(Object(Symfony\Component\HttpKernel\Event\GetResponseEvent), 'kernel.request', Object(Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher)) #4 D:\xampp\htdocs\PROJECT_NAME\vendor\symfony\symfony\src\Symfony\Component\EventDispatcher\Debug\WrappedListener.php(61): call_user_func(Array, Object(Symfony\Component\HttpKernel\ in D:\xampp\htdocs\PROJECT_NAME\var\cache\prod\classes.php on line 3328

我已经清除缓存并且系统正在Prod ENV中运行。 但我仍然没有得到自定义错误模板。

2 个答案:

答案 0 :(得分:0)

首先,您需要在此位置创建新的错误模板: /YOUR_PROJECT_FOLDER/app/Resources/TwigBundle/views/Exception/

如需示例,请创建一个: error.html.twig 以处理所有错误

在第二个中,您必须为错误视图编写一些模板内容。 对于实验,请将此内容放入我们的error.html.twig:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Error test. An Error Occurred: {{ status_text }}</title>
</head>
<body>
<h1>WooHoo! Now you can see new error template</h1>
<h2>The server returned a "{{ status_code }} {{ status_text }}".</h2>
</body>
</html>

在第三个中,让我们在开发环境中检查此错误。为此,将此路由放入您的开发路由文件/YOUR_PROJECT_FOLDER/app/config/routing_dev.yml(它可能已存在)

# app/config/routing_dev.yml
_errors:
    resource: "@TwigBundle/Resources/config/routing/errors.xml"
    prefix:   /_error

添加此路线后,请检查我们的新错误模板。转到您的网络浏览器中的此链接:

/app_dev.php/_error/418其中418只是错误状态代码

如果您在开发环境中看到新的错误模板,那么prod env也是如此。如果要在生产环境中进行检查,请不要忘记清除缓存。

请注意,您可以创建模板error404.html.twig,仅处理404错误。或者,您可以为xml响应500错误创建error500.xml.twig

答案 1 :(得分:0)

对我来说,这是完美无瑕的。可能不是文档的推荐方式,但它很容易理解。您可以尝试将其作为替代方案。

\应用\资源\ TwigBundle \视图\异常\ error.html.twig

{% extends 'layout.html.twig' %}

{% block title %}An Error Occurred: {{ status_text }}{% endblock %}

{% block main %}

    {% if status_code >= 500 %}
        {# twig include 500s server error template here #}
    {% elseif status_code >= 400 %}
        {# twig include 400s user errors template here #}
    {% endif %}

{% endblock %}