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 的页面来显示自定义错误页面。