NotFoundHttpException не перехватывается в контроллере с Lumen 5.6 - PullRequest
0 голосов
/ 03 июля 2018

Я хочу исправить ошибку 404 с помощью пользовательского ответа json.

Вот код:

try {
            $registration = Registration::find($id);
            if ($registration == null) throw new NotFoundHttpException();
            return response()->json($registration, HttpResponse::HTTP_OK);
        } catch (NotFoundHttpException $e) {
            return response()->json(['message' => 'Registration not found'], HttpResponse::HTTP_NOT_FOUND);
        }

но он никогда не входит в блок catch и возвращает представление HTML:

Sorry, the page you are looking for could not be found.

(1/1) NotFoundHttpException
in RoutesRequests.php line 226
at Application->handleDispatcherResponse(array(0))
in RoutesRequests.php line 164
at Application->Laravel\Lumen\Concerns\{closure}()
in RoutesRequests.php line 413
at Application->sendThroughPipeline(array(), object(Closure))
in RoutesRequests.php line 166
at Application->dispatch(null)
in RoutesRequests.php line 107
at Application->run()
in index.php line 28
at require('/Users/julien/Documents/Proyectos/jaumo/public/index.php')
in server.php line 147

Я также пытался с Registration::findOrFail($id);, который должен возвращать ошибку 40, но это тот же результат

Я мог бы изменить это в Handler.php:

public function render($request, Exception $e)
    {
        if ($e instanceof NotFoundHttpException) {
            return response()->json('Not Found', HttpResponse::HTTP_NOT_FOUND);
        }
        return parent::render($request, $e);
    }

но это не совсем то, что я хочу, здесь сообщение статическое, я бы хотел управлять им в контроллере.

Я также пытался добавить NotFoundHttpException::class в массив $ dontReport, но он не работает

Почему и как я могу сделать это только для того, чтобы вернуть пользовательский ответ json.

1 Ответ

0 голосов
/ 03 июля 2018

Я нашел свою ошибку, это было 404 на маршруте, у меня было:

$router->get('/registrations/{id}', 'RegistrationController@show');

вместо

$router->get('/registration/{id}', 'RegistrationController@show');

так, он никогда не входит в контроллер, поэтому не исключал мое исключение.

Спасибо за вашу помощь!

...