В Laravel как вернуть в форму уже заполненные данные при неправильном вводе?
Сразу уточню, что вопрос касается работы без использования хелпера form, т.е. все формы делаю вручную.
Вопрос касается именно обновления уже существующей в базе записи, а не добавления.
Во всех руководствах предлагают такую систему роутов для данной операции:
Если я все правильно понимаю, то метод edit выводит форму и заполняет ее данными полей редактируемой записи из базы данных. При нажатии на "сохранить" вызываем метод update, который сохраняет в базу новые введенные данные и редиректит либо к списку записей либо обратно на страницу edit.
Но как быть в ситуации, если введены некорректные данные (например, не прошли валидацию), в этом случае снова нужно вывести форму при чем таким образом, чтобы она была заполнена "последними" данными, которые ввел пользователь.
В случае с create все просто - мы используем {{ old('...) }} для вывода последних данных.
Но как быть при update? Получается что метод update должен сохранять данные в случае успешного ввода либо же снова выводить форму с введенными данными {{ old('...) }}?
Но в этом случае получается, что фактически нам нужны три шаблона формы - для create, для edit и для update. Многовато получается.
Но тогда получается, что если я перешел на роут edit "первый" раз, то данные должны быть выведены из базы. А если я попал туда по редиректу, то надо подставлять old(). Как сделать такую проверку внутри шаблона заполнять ли форму данными из базы или old-ами?
Нажали Update, не прошли валидацию например, все данные которые заполннил пользователь в форму содержатся в Request. Вот с ним и верните на страницу edit и сообщениями об ошибках.
Дмитрий: Нет. Использовать валидацию запросов, а не отдельно данных. Тогда Валидатор берёт на себя обязанности редиректа с ошибками и старыми значениями. old() в любом случае используйте
То есть типо этого php artisan make:request UpdateMyModalRequest App/Http/Requests/UpdateMyModalRequest
public function rules()
{
// Например такие правила
return [
'title' => 'required|unique|max:255',
'body' => 'required',
];
}
Контроллер и метод update
public function update(UpdateMyModalRequest $request)
{
// Тут ваша логика сохранения. А валидация проходит перед запуском этого метода. Если не прошла валидация, метод не запустится и вас редиректнет обратно. Profit!
}