php - 如何在您的扩展程序中抛出异常?

标签 php exception typo3 typo3-7.6.x

在 Extbase 扩展中,可能需要通知用户有关错误或异常的信息。

在我的例子中,我必须解析一些来自潜在不良来源的数据。因此扩展程序必须验证此数据。如果数据无效,它需要抛出一个异常,然后由 TYPO3 处理。

但是,我只能找到有关异常和错误处理程序如何工作的信息,但找不到有关如何从扩展内部正确抛出异常的信息。

那么从 Extbase 扩展内部抛出异常的预期方法是什么?

预期结果

如果我产生一个语法错误,TYPO3 会显示类似这样的消息: enter image description here (取自 the core API reference 。)

这就是我所期望的正确抛出的错误或异常的样子。

我尝试了什么

编辑:我试过抛出这样的错误:

throw new \Exception('Invalid data');

但是,所有的前端显示都是

Oops, an error occurred! Code: 20160721101726b5339896

另一种可能产生错误的方法:

$GLOBALS['TSFE']->pageNotFoundAndExit('Invalid data');

但是,这显示了“找不到页面”错误,而不是预期的异常。

最佳答案

你隐含地问了 2 个问题:

  1. 如何在我的代码中正确抛出异常?

我认为,您所做的是正确的:只需使用 PHP\Exception 或从\Exception 继承的合适的异常:

throw new \UnexpectedValueException('Invalid data');
  1. 抛出异常后,如何查看更多信息?

这已经得到很好的回答:https://stackoverflow.com/a/34067853/2444812

在开发系统上:

  • 设置配置预设“调试”
  • 在起始页添加 TypoScript:config.contentObjectExceptionHandler = 0

参见 Error and ExceptionHandling Example

在生产系统上:

您通常不想在前端看到完整的堆栈跟踪。这就是为什么 config.contentObjectExceptionHandler 通常设置为默认值,它只显示 糟糕,发生错误!代码:呈现页面上的 20160721101726b5339896。使用此代码,您可以查看日志(是否记录了内容以及记录的内容始终取决于日志系统的配置):

  • sys_log : 查看后端的“日志”
  • 日志文件:var/logs/*.log(参见 Logging with TYPO3)。在旧版本上可能是 typo3temp/logs,在非 Composer 系统上可能是 typo3temp/var/logs/。

关于php - 如何在您的扩展程序中抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38497857/

相关文章:

php - Javascript 文件未在 Wordpress 中加载

php - 我在我的项目中使用 PHP 的工作单元设计模式

javascript - 在 NodeJS 中编写域感知函数

java - 一个封装 java io 的库,不强制客户端使用检查异常

java - 为什么不能处理这个异常呢?

typo3 - 禁用 FluidTYPO3 页面模板和/或内容元素

php - MySQL 日期比较返回 null

php - 按键对数组排序

php - 在扩展中获取当前页面的父页面

TYPO3 无法正确解析 url