Я пытаюсь вывести пользовательские исключения для своего 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');
}