РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
⊗pplrSpRdOE 15 of 210 menu

old при редактировании записи в Laravel

При создании формы поля часто пустые. При редактировании нужно сразу показать текущие данные записи - например, заголовок и текст поста из базы. Если просто написать $post->title в value, после ошибки проверки и редиректа назад ввод пользователя пропадёт. Если только old('title') - при первом открытии формы поля будут пустыми.

Решение: вторым аргументом old передать значение из модели. Тогда при первом заходе форма заполнена из БД, а после ошибки - тем, что уже ввёл пользователь.

Маршрут редактирования:

<?php Route::get('/post/{id}/edit', [PostController::class, 'edit']); Route::post('/post/{id}/update', [PostController::class, 'update']); ?>

В контроллере находим пост и отдаём его в представление:

<?php namespace App\Http\Controllers; use App\Models\Post; use Illuminate\Http\Request; class PostController extends Controller { public function edit($id) { $post = Post::findOrFail($id); return view('post.edit', ['post' => $post]); } public function update(Request $request, $id) { $post = Post::findOrFail($id); if (!$request->filled('title')) { return back()->withInput(); } $post->title = $request->input('title'); $post->text = $request->input('text'); $post->save(); return redirect('/posts'); } } ?>

В форме начальные данные берутся из $post, а после ошибки - из old:

<form method="POST" action="/post/{{ $post->id }}/update"> @csrf <input type="text" name="title" value="{{ old('title', $post->title) }}" > <textarea name="text">{{ old('text', $post->text) }}</textarea> <button type="submit">save</button> </form>

При первом открытии old('title') пустой - в поле попадёт $post->title. После редиректа с withInput - то, что пользователь уже отправил.

Сделайте редактирование поста: маршрут, действие edit и форму с old('title', $post->title).

В update при пустом title вернитесь назад с withInput и убедитесь, что ввод сохранился в форме.

Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить