October\Rain\Exception\ApplicationException 类,别名为 ApplicationException,是最常见的异常类型,当简单的应用程序条件失败时使用。
throw new ApplicationException('You must be logged in to do that!');错误消息将被简化,并且绝不包含任何敏感信息,例如 PHP 文件和行号。
该 October\Rain\Exception\SystemException 类, 别名为 SystemException, 用于对系统运行至关重要的错误并始终会被记录.
throw new SystemException('Unable to contact the mail server API');当抛出此异常时 会显示一条详细的错误消息 其中包含发生异常的文件名和行号。
October\Rain\Exception\NotFoundException 类,别名为 NotFoundException,用于处理遇到缺失记录时发生的错误。
throw new NotFoundException('Record not found');当抛出此异常时,标准响应将变为显示最近的未找到页面,并添加404状态码。
October\Rain\Exception\ValidationException 类,别名为 ValidationException,用于处理与表单提交和无效字段直接相关的错误。该消息应包含一个包含字段和错误消息的数组。
throw new ValidationException(['username' => 'Sorry that username is already taken!']);您也可以传入一个 验证服务 实例。
$validation = Validator::make(...);
if ($validation->fails()) {
throw new ValidationException($validation);
}当此异常被抛出时 AJAX 框架 将以可用格式提供此信息并聚焦第一个无效字段.
该 October\Rain\Exception\AjaxException 类, 别名为 AjaxException, 被认为是一个 "智能错误" 并将返回该 HTTP 状态码 406. 这使它们能够传递响应内容, 如同它们是一个成功的响应.
throw new AjaxException(['#flashMessages' => $this->renderPartial(...)]);当抛出此异常时 AJAX 框架 将遵循标准错误工作流 但也会刷新指定的局部视图。
所有异常都由 October\Rain\Foundation\Exception\Handler 类处理。该类包含两个方法:report 和 render,它们决定了错误是否应该被记录以及如何响应错误。
然而,您可以在需要时使用 App::error 方法指定自定义处理器。处理器根据它们所处理的异常的类型提示进行调用。例如,您可以创建一个只处理 RuntimeException 实例的处理器:
App::error(function(RuntimeException $exception) {
// Handle the exception...
});如果一个异常处理器返回一个响应,该响应将被发送到浏览器并且不会调用其他错误处理器。
App::error(function(InvalidUserException $exception) {
return 'Sorry! Something is wrong with this account!';
});要监听 PHP 致命错误,您可以检查 Error 异常类型:
App::error(function(Error $exception) {
//
});如果您有多个异常处理器,它们应该从最通用到最具体地定义。因此,例如,一个处理所有 Exception 类型异常的处理器,应该在像 SystemException 这样的自定义异常类型之前定义。
错误处理程序注册通常属于引导代码的范畴。换句话说,它们为你的应用程序实际处理请求做准备,并且通常需要在路由或控制器实际被调用之前执行。最常见的位置是插件注册文件的boot方法。或者,插件可以在插件目录中提供一个名为init.php的文件,你可以在其中放置错误处理程序注册。
某些异常描述了来自服务器的 HTTP 错误代码。例如,这可能是一个“页面未找到”错误 (404),一个“未经授权错误” (401),甚至是开发者生成的 500 错误。为了在应用程序中的任何地方生成这样的响应,请使用以下内容。
App::abort(404);此 abort 方法将立即抛出一个异常,该异常将由异常处理器渲染。可选地,您可以提供响应文本。
App::abort(403, 'Unauthorized action.');此方法可在请求的生命周期内的任何时候使用。此外还有一个配套的用于中止请求的 Twig 过滤器。
默认情况下,任何错误都将显示一个详细的错误页面,其中包含文件内容、行号以及错误发生的堆栈跟踪。您可以通过在 config/app.php 脚本中将配置值 debug 设置为 false,并创建一个 URL 为 /error 的页面来显示自定义错误页面。