Запросы пользовательской формы Laravel не проверяются

Я создал в своем laravel 5.6 запрос специальной формы примерно так:

<?php

namespace Noetic\Plugins\blog\Requests;

use Illuminate\Foundation\Http\FormRequest;

class StorePostRequest 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 [

        ];
    }
}

Когда я ничего не помещаю в правила, я заставляю работать контроллеры, а когда я помещаю какое-либо правило внутрь, предположим, что я помещаю

return [
    'title' =>  'required',
    'body'  =>  'required',
];

Он работает до тех пор, пока не будет подтвержден истинным, я имею в виду, что если заголовок и тело переданы, он проверяется, но когда я не отправляю никаких данных для заголовка или тела, я не получаю ошибок в качестве ответа, я вижу домашнюю страницу, принадлежащую сети промежуточное ПО, я хочу вернуть данные об ошибке в качестве ответа.

Мой контроллер выглядит примерно так:

public function store( StorePostRequest $request )
{
    if ($request->fails()) {
        return $this->errorResponse($request->errors()->all());
    }

    $data = $request->only('title', 'body');

    $post = Post::create($data);

    return response()->json(['post'=> $post ],200);
}

Помогите мне с этим. Спасибо


person Nitish Kumar    schedule 01.05.2018    source источник
comment
StorePostRequest автоматически проверит и отправит ответ об ошибке, вам не нужно делать $request->fails(). Проверьте это.   -  person The Alpha    schedule 01.05.2018
comment
@TheAlpha да, я знаю, я пробовал использовать и без них, но он не работает должным образом.   -  person Nitish Kumar    schedule 01.05.2018
comment
Как вы отправляете ajax запрос? Если вы отправляете ajax запрос, Laravel отправляет ошибки как json, иначе вы получите ответ перенаправления. Итак, убедитесь, что вы отправляете запрос правильно, чтобы Laravel мог определить тип ответа, который он должен отправить.   -  person The Alpha    schedule 01.05.2018
comment
@TheAlpha вызывает маршруты в методе post с заголовками, определенными как Content-Type as application/json. Я использую postman для тестирования api.   -  person Nitish Kumar    schedule 01.05.2018
comment
Вам нужно отправить заголовок accept, то есть: Accept: application/json.   -  person The Alpha    schedule 01.05.2018
comment
@TheAlpha да, это сработало, спасибо.   -  person Nitish Kumar    schedule 01.05.2018


Ответы (2)


В вашей функции контроллера вам не нужно ловить проверку, просто попробуйте с успешным путем.

Обработчик выполнит вашу проверку

public function store( StorePostRequest $request )
{
    $data = $request->only('title', 'body');

    $post = Post::create($data);

    return response()->json(['post'=> $post ],200);
}

В вашем обработчике

use Illuminate\Validation\ValidationException;

if ($exception instanceof ValidationException)
{
    return response($exception->errors())->header('Content-Type', 'application/json');
}
person Hamelraj    schedule 07.05.2019

используйте Illuminate \ Contracts \ Validation \ Validator;

используйте Illuminate \ Http \ Exceptions \ HttpResponseException;

после этого

protected function failedValidation(Validator $validator) {
    throw new HttpResponseException(response()->json($validator->errors(), 422));
}
person Raja Hassan    schedule 23.10.2018