在Laravel 5上全局捕获ModelNotFoundException

时间:2018-11-01 13:02:01

标签: laravel laravel-5 laravel-5.7

我正在尝试从app \ Exceptions \ Handler类中全局捕获 ModelNotFoundException ,以便不必在每个控制器上都进行检查。

但是,尽管它在控制器内部也可以正常工作,但它却无法正常工作:

try {

        $asset = Asset::findOrFail($asset_id);

    } catch (Exception $e) {

        if ($e instanceof ModelNotFoundException)
        {
            $model = explode('\\', $e->getModel());
            return $this->respondWithRecordNotFound(end($model) . ' record not found');
        }

        return $this->respondWithGeneralError($e->getMessage());
    }

app \ Exceptions \ Handler:

public function render($request, Exception $exception)
{

    if ($exception instanceof ModelNotFoundException) 
    {
        $model = explode('\\', $exception->getModel());
        return $this->respondWithRecordNotFound(end($model) . ' record not found');
    }

    return parent::render($request, $exception);
}

2 个答案:

答案 0 :(得分:0)

我不确定您的respondWithRecordNotFound在做什么。我想问题可能出在这里。

无论如何,我只是尝试了一下,这对我有用。在App\Exceptions\Handler.php@render

if ($e instanceof \Illuminate\Database\Eloquent\ModelNotFoundException) {
    return response()->view(
        'errors.404', 
        ["message" => $e->getModel() . ' record not found'], 
        404
    );
}

答案 1 :(得分:0)

只需确保已在Handler.php中添加了使用

use \Illuminate\Database\Eloquent\ModelNotFoundException;