Laravel包注册异常处理程序

时间:2015-06-18 09:45:36

标签: php laravel-5 service-provider

我想知道是否可以在Laravel 5的包中注册第二个异常处理程序。

我有一个包(让我们称之为 api-serializer )注册一个中间件,将所有请求转换为JSON(对于API),这个包注册2个助手:success()和发生错误(或不发生错误)时专门处理json的failure()

在我的应用程序异常处理程序中,我执行以下操作:

/**
 * Render an exception into an HTTP response.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Exception  $e
 * @return \Illuminate\Http\Response
 */
public function render($request, Exception $e)
{
    return failure($e->getMessage());
}

现在我有第二个包(让我们称之为 tumblr-api )进行http调用并引发异常,例如:

throw (new CustomCoolException)->setModel($model);

我想以不同的方式对待此异常,因为该消息位于$model中,请执行以下操作:

if ($e instanceof CustomCoolException) {
    return failure($e->getModel()->getMessage());
}

我不想做什么将我的包异常添加到我的主异常处理程序中,因为它们将被紧密绑定。

我既不想在我的 api-serializer 之间创建一个依赖关系,它将success()failure()公开给我的 tumblr-api 包。< / p>

是否有可能从我的 api-serializer 注册第二个ExceptionHandler或为其添加特定的开关而不改变其他任何内容?

我想让我的 tumblr-api 包尽可能独立,所以安装它的用户只需注册服务提供商即可!

1 个答案:

答案 0 :(得分:1)

你可以在你的包的控制器中使用你自己的包的异常处理程序覆盖App的异常处理程序,如下所示:

class YourPackageController extends Controller
{
    public function __construct()
    {
        \App::singleton(
            \Illuminate\Contracts\Debug\ExceptionHandler::class,
            YourExceptionHandler::class
        );
    }

致信https://laracasts.com/discuss/channels/requests/custom-exception-handler-based-on-route-group

致意
相关问题