alexwhitman/enhanced-exception-handler

此包已被放弃,不再维护。未建议替代包。

Laravel 的增强异常处理器

1.2.0 2014-06-14 16:33 UTC

This package is not auto-updated.

Last update: 2020-01-19 17:20:55 UTC


README

提供略微增强的异常处理器,允许重新抛出异常。

为什么?

想象一下,你有以下代码

App::error(function(Illuminate\Database\Eloquent\ModelNotFoundException $exception)
{
	throw new Symfony\Component\HttpKernel\Exception\HttpException(404, null, $exception);
});

App::error(function(Symfony\Component\HttpKernel\Exception\HttpException $exception)
{
	return View::make('404');
});

Route::get('/', function() {
	$user = User::findOrFail(100);
});

如果用户 100 不存在,将抛出 Illuminate\Database\Eloquent\ModelNotFoundException 并被第一个异常处理器捕获。处理器将尝试抛出新的 Symfony\Component\HttpKernel\Exception\HttpException,但核心框架将在此处停止,并输出消息 "Error in exception handler"。此包更改了异常处理方式,允许在处理器内部抛出异常,在上面的示例中,将返回 404 视图。

递归

通过允许异常的递归处理,如果 FooException 的处理器抛出 BarException,而 BarException 的处理器又抛出 FooException,则可能会陷入循环。因此,处理器会跟踪它之前遇到的异常,如果遇到同一类型的异常多次,则会退出。

安装

alexwhitman/enhanced-exception-handler 添加到 composer.json 文件的 require 部分。

"alexwhitman/enhanced-exception-handler": "1.2.x"

运行 composer update 以安装最新版本。

设置

核心异常处理器服务提供者在处理过程中注册得非常早,因此不能通过简单地更改 app/config/app.php 中注册的服务提供者来替换。相反,需要一个新的 Application 对象来注册新的处理器。

要使用新的 Application 对象,更新 bootstrap/start.php 并将 $app = new Illuminate\Foundation\Application; 替换为 $app = new AlexWhitman\EnhancedExceptionHandler\Application;

变更日志

1.2.0

  • Laravel 4.2 的更新

1.1.1

  • 修复了 laravel/framework >= 4.1.25 的问题

1.1.0

  • Laravel 4.1 的更新

1.0.0

  • 初始发布