Вызов функции-члена fails () при ошибке массива при использовании laravel Запрос классов - PullRequest
0 голосов
/ 26 февраля 2020

Я использую пользовательский класс запросов для laravel проверок форм.

Это мой класс запросов

class ContactUsRequest extends FormRequest
{
    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'lname' => 'required'
        ];
    }

   /**
   * Get the error messages for the defined validation rules.
   *
   * @return array
   */
    public function messages()
    {
        return [
            'lname.required' => 'please enter the last name'
        ];
    }

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

И вот где я его называю,

public function send(ContactUsRequest $request) {
        $validator = $request->validated();

        if ($validator->fails()) {
            return redirect('/contactus')
                            ->withErrors($validator)
                            ->withInput();
        } else {
            ContactUs::create($request->all());

            return redirect('/contactus');
        }
    }

Но когда я ввожу правильные значения, я получаю это,

Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_ERROR) Сбой вызова функции-члена () для массива

Ответы [ 2 ]

1 голос
/ 26 февраля 2020

Это потому, что объект запроса автоматически делает это за вас, и вам не нужно перенаправлять обратно вручную, а переменная $validator содержит validated inputs, поэтому в вашем случае вам не нужно ничего делать, и вы можете удалить if и перенаправить безопасно

public function send(ContactUsRequest $request) {
            ContactUs::create($request->validated());

            return redirect('/contactus');
        }
    }
1 голос
/ 26 февраля 2020

Использование классов запроса формы

Если проверка не пройдена, будет сгенерирован ответ о перенаправлении автоматически , чтобы отправить пользователя обратно на прежнее место. Ошибки также будут мигать в сеансе, чтобы они были доступны для отображения. Если запрос был AJAX запросом, пользователю будет возвращен HTTP-ответ с кодом состояния 422, включая JSON представление ошибок проверки.

Чтобы зафиксировать сбой проверки, вы можете использовать Валидатор Фасад

Например:

use Illuminate\Support\Facades\Validator;
//...

public function send(Request $request) {
        $validator = Validator::make($request->all(), [
            'lname' => 'required'
            // ...
        ]);

        if ($validator->fails()) {
            return redirect('/contactus')
                            ->withErrors($validator)
                            ->withInput();
        }

        ContactUs::create($request->all());

        return redirect('/contactus');
}

Форма заявки на подтверждение документации

Создание документации валидатора вручную

И мы можем оставить ContactUsRequest вот так.

public function send(ContactUsRequest $request) {
        $validator = $request->validated();

        ContactUs::create($request->all());

        return redirect('/contactus');
}
...