Глобально поймать ModelNotFoundException на Laravel 5 - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь перехватить ModelNotFoundException глобально из класса app \ Exceptions \ Handler, чтобы не проверять его на каждом контроллере.

Но это не работает, хотя работает нормально изнутри контроллера:

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 голосов
/ 16 февраля 2019

Просто убедитесь, что вы добавили использование в Handler.php

use \Illuminate\Database\Eloquent\ModelNotFoundException;
0 голосов
/ 01 ноября 2018

Я не уверен, что делает ваш 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
    );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...