Laravel: поймать маршрут не определено исключение в API - PullRequest
0 голосов
/ 17 октября 2019

Я думаю, что этот вопрос может показаться кому-то безумным ...

Возможно ли перехватить исключение Route not defined при выполнении запроса API и вернуть достойный ответ вместо получения взорванного ответа отсамо приложение ..?

Например: у меня есть маршрут в api.php, называемый Route::post('/validate-mobile', 'Api\ComeController@validateMobile'), к которому необходимо получить доступ методом POST, и разработчик пытается получить к нему доступ через GET, PUT или любой другой метод.

Ответы [ 2 ]

2 голосов
/ 17 октября 2019

Да, вы можете: в Handler (app/Exceptions/Handler.php) записать код в render() метод

public function render($request, Exception $exception)
{
    if ($exception instanceof NotFoundHttpException) { // for 404
      // do stuff
    }
    if ($exception instanceof MethodNotAllowedHttpException) { // for checking  api method
      // do stuff
    }
    return parent::render($request, $exception);
}

Использовать эту строку выше:

use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
1 голос
/ 17 октября 2019

1 перейдите в App \ Exceptions \ Handler.php

2, измените функцию рендеринга, удалите родительскую функцию рендеринга и вместо этого верните свой собственный ответ json, как в этомсуть:

  <?php
    namespace App\Exceptions;
    use Exception;
    use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
    class Handler extends ExceptionHandler
    {
        /**
         * A list of the exception types that are not reported.
         *
         * @var array
         */
        protected $dontReport = [
            //
        ];
        /**
         * A list of the inputs that are never flashed for validation exceptions.
         *
         * @var array
         */
        protected $dontFlash = [
            'password',
            'password_confirmation',
        ];
        /**
         * Report or log an exception.
         *
         * This is a great spot to send exceptions to Sentry, Bugsnag, etc.
         *
         * @param  \Exception  $exception
         * @return void
         */
        public function report(Exception $exception)
        {
            parent::report($exception);
        }
        /**
         * Render an exception into an HTTP response.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  \Exception  $exception
         * @return \Illuminate\Http\Response
         */
        public function render($request, Exception $exception)
        {
            return response()->json(
                [
                    'errors' => [
                        'status' => 401,
                        'message' => 'Unauthenticated',
                    ]
                ], 401
            );
        }
    }
...