Laravel Api не отправляет необходимое сообщение об ошибке json из класса Request - PullRequest
0 голосов
/ 31 октября 2019

Класс запроса

class LoginRequest extends FormRequest
{
    public function wantsJson() {
        return true;
    }   

    public function authorize() {
        return true;
    }

    public function rules() {
        $validators = [
            'email'    =>  'required',
            'password' =>  'required'
        ];
        return $validators;
    }

    public function failedValidation(\Illuminate\Contracts\Validation\Validator $validator) {
        if($validator->fails()) {
            //print_r($validator->errors());
            //die();

        }
        return parent::failedValidation($validator);
    }
}

У меня есть API, написанный на Laravel. Я пытаюсь проверить правильность через расширение Почтальон. Когда я отправляю некоторые значения адреса электронной почты и пароля, это работает. Я получаю сообщение о том, что учетные данные существуют или нет.

Если я не отправлю значения, то не будет возвращен пакет сообщений json.

Я могу подтвердить, что проверка естьсообщения об ошибках в MessageBag. Вот скриншот. Если скриншот не ясен, нажмите его, чтобы увидеть его.

Еще одна странная вещь - возвращаемый код состояния 200

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация

enter image description here

1 Ответ

1 голос
/ 31 октября 2019

В моей ситуации я настраиваю свой Laravel API следующим образом.

в моем App\Exceptions\Handler

public function render($request, Exception $exception)
    {
        // return parent::render($request, $exception);

        $rendered = parent::render($request, $exception);

        if ($exception instanceof ValidationException) {
            $json = [
                'error' => $exception->validator->errors(),
                'status_code' => $rendered->getStatusCode()
            ];
        } elseif ($exception instanceof AuthorizationException) {
            $json = [
                'error' => 'You are not allowed to do this action.',
                'status_code' => 403
            ];
        }
        else {
            // Default to vague error to avoid revealing sensitive information
            $json = [
                'error' => (app()->environment() !== 'production')
                    ? $exception->getMessage()
                    : 'An error has occurred.',
                'status_code' => $exception->getCode()
            ];
        }

        return response()->json($json, $rendered->getStatusCode());
    }

также импортируем это сверху

use Illuminate\Validation\ValidationException;
use Illuminate\Auth\Access\AuthorizationException;

Это помогаетчтобы отформатировать ошибки в формате JSON.

My LoginRequest выглядит так (просто)

class LoginRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'email' => 'required|email',
            'password' => 'required'
        ];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...