Как заставить Laravel валидацию НЕ сохранять request данные на следующий запрос? (flash-data)

Я создал обычный Validation Request класс:

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class StoreCattleTypeRequest 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 [
            'cattle_type_name' => 'required',
            'cattle_type_max_age' => 'required|integer|min:2|max:20',
        ];
    }

    /**
     * Configure the validator instance.
     *
     * @param  \Illuminate\Validation\Validator  $validator
     * @return void
     */
    public function withValidator($validator)
    {
        $validator->after(function ($validator) {
            request()->session()->flush();
        });
    }
}

Но когда валидация не проходит проверку, данные из запроса сохраняются на следующий запрос.

Это поведение некорректно для меня, потому что я использую инпуты с этими name в модалке, которая может вызываться из разных строк.

Следовательно, если вызвать эту модалку из любой строки, то появятся эти некорректные данные в инпуте с предыдущего запроса, несмотря на то что я не использую old() метод в этих инпутах.
(Строками я называю табличные tr теги, в которых может быть кнопка edit или store, которые и вызывают модалку)

Я пытался использовать такой код в этом классе

public function withValidator($validator)
{
    $validator->after(function ($validator) {
        request()->session()->flush();
    });
}

Но это не работает.

То что мне нужно можно достичь, если написать следующий код в контроллере:

$validator = Validator::make($request->all(), [
    'cattle_type_name' => 'required',
    'cattle_type_max_age' => 'required|integer|min:0|max:20',
]);
if ($validator->fails()) {
    return redirect()->back()->withErrors($validator);
}

В этом случае если валидация не проходит, данные из инпутов не сохраняются на следующий запрос.
Но я хочу переместить эту логику в Form Request класс, чтобы не занимать этим контроллер.

К сожалению я не смог найти способа в документации Laravel или на каких-либо форумах как это сделать. Знаю что есть методы типа $request->except(), $request->only() - в которые можно передать нужные данные из запроса, но мне нужно чтобы все данные не сохранялись, что не позволяют сделать данные методы.

Есть какие-либо идеи?


Ответы (0 шт):