如何自定义错误页面吗
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 2.5,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
如何自定义错误页面吗
在抛出异常时,核心HttpKernel
类捕获并分派kernel.exception
事件。这给你的力量异常转换成一个响应
在几个不同的方式。
核心TwigBundle设置为这个事件侦听器将运行一个可配置的(否则任意)控制器生成响应。的默认的控制器有一个合理的方式使用一个可用的组错误模板。
因此,可以以不同的方式定制错误页面,根据你需要多少控制:
- 使用默认ExceptionController和创建一些模板允许您自定义不同的错误页面的外观(容易);
- 替换默认异常控制器使用您自己的(中间)。
- 使用内核。异常event to come up with your own handling (advanced).< /a>
使用默认ExceptionController
默认情况下,showAction ()
的方法ExceptionController将被称为异常发生时。
该控制器将显示一个异常或错误页面,根据设置的kernel.debug
国旗。而异常页面给你很多有用的信息在开发期间,错误页面是在生产的过程中向用户显示。
如何选择错误和异常页面的模板吗
TwigBundle包含一些默认的错误和异常页面的模板资源/视图/例外
目录中。
提示
标准安装Symfony, Tob娱乐下载wigBundle可以找到供应商/ syob娱乐下载mfony / symfony / src / symfony /包/ TwigBundle
。除了标准的HTML错误页面,它还提供了一个默认的错误页面对于许多最常见的响应格式,包括JSON (error.json.twig
),XML (error.xml.twig
),甚至JavaScript (error.js.twig
),等等。
这是如何ExceptionController
将选择一个可用的模板根据请求HTTP状态代码和格式:
- 为错误页面时,它首先查找给定的模板格式和状态码(如
error404.json.twig
); - 如果不存在或应用,它查找给定格式(如模板
error.json.twig
或exception.json.twig
); - 最后,它忽略了格式和HTML模板(如回落
error.html.twig
或exception.html.twig
)。
提示
如果异常被处理实现了HttpExceptionInterface,getStatusCode ()
方法将调用获取HTTP状态代码使用。否则,状态代码是“500”。
覆盖或添加模板
覆盖这些模板,仅仅依靠标准方法覆盖模板,生活在一个包。有关更多信息,请参见创建和使用模板。
例如,覆盖默认的错误模板,创建一个新的模板位于应用程序/资源/ / error.html.twig TwigBundle /视图/异常
:
1 2 3 4 5 6 7 8 9 10 11
< ! DOCTYPEhtml><html><头><元http-equiv=“内容类型”内容=“text / html;charset = utf - 8”/ ><标题>发生错误:{{status_text}}< /标题>< /头><身体><h1>哦!一个错误发生< /h1><h2>服务器返回一个“{{status_code}}{{status_text}}”。< /h2>< /身体>< /html>
谨慎
你不得使用is_granted
在你的错误页面(或布局错误页面使用的),因为路由器防火墙之前运行。如果路由器将抛出一个异常(例如,当线路不匹配),然后使用is_granted
将进一步抛出一个异常。您可以使用is_granted
安全的说{%如果app.user is_granted (“…”) %}
。
提示
如果你不熟悉理解,别担心。嫩枝是一个简单,强大的和可选的模板引擎集成Symfony。ob娱乐下载关于树枝看到的更多信息创建和使用模板。
这个工作不仅取代默认的模板,但也添加新的。
例如,创建一个应用程序/资源/ / error404.html.twig TwigBundle /视图/异常
模板来显示一个特殊的页面为404(页面不存在)错误。请参考前一节的顺序ExceptionController
尝试不同的模板名称。
提示
通常,最简单的方法来定制一个错误页面从TwigBundle复制它app /资源/ TwigBundle /视图/例外
然后修改它。
请注意
debug-friendly异常页面显示开发人员甚至可以定制以同样的方式通过创建模板等exception.html.twig
为标准的HTML页面或异常exception.json.twig
JSON异常的页面。
替换默认ExceptionController
如果你需要更多灵活性不仅仅是压倒一切的模板,那么你可以改变控制器,它显示错误页面。例如,您可能需要通过一些额外的变量到你的模板。
谨慎
确保你不会失去异常页面呈现在开发过程中有用的错误信息。
为此,只需创建一个新的控制器和设置twig.exception_controller选择指向它。
- YAML
- XML
- PHP
1 2 3
# app / config / config.yml枝:exception_controller:AppBundle:例外:showException
提示
你也可以设置控制器作为服务。
的默认值twig.controller.exception: showAction
指的是showAction
的方法ExceptionController
前面描述的,这是在DIC的注册twig.controller.exception
服务。
控制器将被传递两个参数:异常
,这是一个FlattenException实例创建的异常处理日志记录器
的一个实例,DebugLoggerInterface(可能是零
)。
提示
控制器将发出的请求中创建的ExceptionListener。这是由TwigBundle建立事件监听器。
当然,你可以也扩展了先前描述ExceptionController。在这种情况下,您可能想要覆盖一个或两个showAction
和findTemplate
方法。后者定位模板使用。
谨慎
写作,ExceptionController
是不Symfony API的ob娱乐下载一部分,所以请注意,它可能会改变在以下版本。
处理内核。异常事件
正如一开始所提到的,kernel.exception
事件在每次Symfony内核需要处理异常。ob娱乐下载更多信息,见内部。
处理这个事件实际上是更强大的比之前所解释的,还需要一个Symfony内部彻底的理解。ob娱乐下载
给一个例子,假设您的应用程序将专业与特定意义域异常。
在这种情况下,所有的违约ExceptionListener
和ExceptionController
可以为你做的是试图找出正确的HTTP状态代码和显示你的好看的错误页面。
编写自己的事件监听器为kernel.exception
事件允许您一下异常并采取不同的行动取决于它。这些行动可能包括记录异常,将用户重定向到另一个页面或呈现专业错误页面。
请注意
如果你的听众电话setResponse ()
在GetResponseForExceptionEvent、事件传播将停止和响应将被发送到客户端。
这种方法允许您创建集中和分层的错误处理:相同而不是捕捉和处理异常在不同的控制器一次又一次,你可以只有一个(或几个)的听众。
提示
看一个例子,看一看ExceptionListener在安全组件。
它处理各种安全相关的在您的应用程序(比如抛出的异常AccessDeniedException),并采取措施将用户重定向到登录页面,登录和其他东西。
好运!