alexwhitman / enhanced-exception-handler
Laravel 的增强异常处理器
Requires
- php: >=5.3.0
- laravel/framework: 4.2.x
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
- 初始发布