Пользовательский обработчик исключений не выводит - PullRequest
0 голосов
/ 21 июня 2020

Я пытаюсь вывести пользовательские исключения для своего API:

app / Exceptions / Handler. php

public function render($request, Throwable $exception)
{
    if ($exception instanceof \Stripe\Exception\ApiErrorException) {
        return response()->json([
            'code' => $exception->getCode(),
            'message' => $exception->getMessage(),
        ]);
    }
    $response = $this->handleException($request, $exception);
    return $response;
}

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

    if ($exception instanceof MethodNotAllowedHttpException) {
        return $this->errorResponse('The specified method for the request is invalid', 405);
    }

    if ($exception instanceof NotFoundHttpException) {
        //return $this->errorResponse('The specified URL cannot be found', 404);

        dd('woo');
    }

    if ($exception instanceof HttpException) {
        return $this->errorResponse($exception->getMessage(), $exception->getStatusCode());
    }

    if (config('app.debug')) {
        return parent::render($request, $exception);            
    }
    return $this->errorResponse('Unexpected Exception. Try later', 500);

}

Сейчас я пытаюсь для проверки обработчика исключений путем запроса идентификатора, которого нет в моем контроллере:

public function processCheckout(Request $request)
{    
    
    //Id 100 doesn't exist
    $plan = Plan::findOrFail(100);
    $user = $user = auth()->user();
    
    //If user has no subscriptions subscribe them to new plan
    if($user->subscriptions->count() === 0){
        $user->newSubscription($plan->name, $plan->stripe_plan_id)->create($request->payment_method['id']);

        //return response([], 201);
    }
}

Вместо laravel выброса исключения, которое я поместил в обработчик, я не получаю никаких исключений. Когда я включаю отладку, похоже, исключение не улавливается методом рендеринга:

{
    "message": "No query results for model [App\\Plan] 100",
    "exception": "Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException",
}

Как мне заставить это работать и реализовать собственное сообщение? это существо:

if ($exception instanceof NotFoundHttpException) {
    //return $this->errorResponse('The specified URL cannot be found', 404);

    dd('woo');
}

1 Ответ

0 голосов
/ 22 июня 2020

Я разобрался. По какой-то причине, когда модель не предназначена, в сообщении об исключении написано NotFoundHttpException. Как вы можете видеть в этой части ответа выше:

{
    "message": "No query results for model [App\\Plan] 100",
    "exception": "Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException",
}

Настоящее исключение - модель не найдена, исключение:

Вверху

use Illuminate\Database\Eloquent\ModelNotFoundException;

В методе рендеринга

if ($exception instanceof ModelNotFoundException) {
    return response()->json([
        'message' => 'Entry for '.str_replace('App\\', '', $exception->getModel()).' not found'], 404);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...