为什么我的 Laravel 11 项目不使用我的异常处理?

问题描述 投票:0回答:1

我正在尝试处理 Laravel 11 项目中 Passport 的一些异常,但由于某种原因,我添加到 app.php 文件的

->withExceptions
部分的任何可渲染异常(Passport 和其他异常)都将被忽略。

我正在我的路线调用的方法的开头使用

throw new \Laravel\Passport\Exceptions\MissingScopeException();
进行测试。

我期望工作的代码如下所示(在我的 app.php 的

->withExceptions
部分内):

$exceptions->render(function (\Laravel\Passport\Exceptions\MissingScopeException $e, \Illuminate\Http\Request $request) {
    return response()->json([
        'success' => false,
        'error'   => $e->getMessage(),
    ], 403);
});

但这被忽略了,而是使用异常本身的异常处理。我还尝试使用异常

Symfony\Component\HttpKernel\Exception\NotFoundHttpException
来处理不存在的路由,但这也会被忽略,并且只使用该异常本身的任何处理。我还尝试使用
$exceptions->renderable
而不是
$exceptions->render
,因为 Exceptions 类传递给
->withExceptions
使得它们看起来像是可以互换的,但这也不起作用。

证明至少

->withExceptions
部分在一定程度上有效的一件事是,它确实有效:

$exceptions->shouldRenderJsonWhen(function (\Illuminate\Http\Request $request) { 
    return $request->is('api/*');
});

这使得 Passports MissingScopeException 为 API 路由返回 JSON。我还测试过的其他东西是

$exceptions->respond()

我使用的特定 Laravel 版本是(如 php artisan --version 返回)

Laravel Framework 11.2.0

我错过了什么吗?我对以任何不同的方式处理异常非常陌生,与在一段可能发生异常的代码中使用 try/catch 块一样,所以我可能只是误解了这一点或遗漏了一些明显的东西,但我真的很感激这里的一些帮助.

php laravel exception error-handling laravel-11
1个回答
0
投票

我自己最近在 Laravel 11 中的异常处理方面苦苦挣扎,我找到了一个使用

$exception->renderable
的解决方案:

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        ...
    )
    ->withMiddleware(function (Middleware $middleware) {
        //
    })
    ->withExceptions(function (Exceptions $exceptions) {
           
        $exceptions->renderable(function (YouException $e) {
            return response()->json([
               'message' => 'message to be displayed.'
            ], 500);
        });       

    })->create();

取自这篇文章 - link - 希望它可能有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.