Реализуем редактирование, удаление и отображение записей на отдельных страницах.
Кнопка «Подробнее»
Для реализации кнопки «Подробнее», определим URL-адрес перехода: /contact/{id}, где {id} — ID записи из базы данных. В маршрутизации (routes/web.php):
Route::get('/contact/{id}', [ContactController::class, 'showOneMessage'])->name('contact.detail');
Этот маршрут принимает динамическое значение {id} и вызывает метод showOneMessage контроллера ContactController.
Функция showOneMessage и шаблон
Функция showOneMessage в контроллере ContactController (app/Http/Controllers/ContactController.php):
public function showOneMessage($id)
{
return view('contact.showOneMessage', ['data' => Contact::find($id)]);
}
Функция принимает ID записи и возвращает представление contact.showOneMessage с данными, полученными с помощью Contact::find($id).
Шаблон resources/views/contact/showOneMessage.blade.php:
<h1>{{ $data->subject }}</h1> <p>Email: {{ $data->email }}</p> <p>Сообщение: {{ $data->message }}</p>
Шаблон выводит заголовок, email и сообщение записи, используя переменную $data.
Ссылка «Подробнее» в представлении
В основном представлении (resources/views/contact/index.blade.php) добавим ссылку:
@foreach ($contacts as $contact) <a href="{{ route('contact.detail', $contact->id) }}">Подробнее</a> @endforeach
Редактирование записей
Создадим маршрут и функцию для редактирования:
Route::get('/contact/{id}/update', [ContactController::class, 'updateMessage'])->name('contact.update');
public function updateMessage($id)
{
return view('contact.updateMessage', ['data' => Contact::find($id)]);
}
Шаблон resources/views/contact/updateMessage.blade.php:
<form method="POST" action="{{ route('contact.update.submit', $data->id) }}"> @csrf <input type="text" name="name" value="{{ $data->name }}"> <input type="email" name="email" value="{{ $data->email }}"> <input type="text" name="subject" value="{{ $data->subject }}"> <textarea name="message">{{ $data->message }}</textarea> <button type="submit">Обновить</button> </form>
Шаблон содержит форму для редактирования. Используется метод POST и маршрут contact.update.submit.
Маршрут и функция для обработки формы:
Route::post('/contact/{id}/update', [ContactController::class, 'updateMessageSubmit'])->name('contact.update.submit');
public function updateMessageSubmit($id, Request $request)
{
$contact = Contact::find($id);
$contact->update($request->all());
return redirect()->route('contact.detail', $id)->with('success', 'Сообщение было обновлено');
}
Функция обновляет запись и перенаправляет на страницу с подробной информацией.
Удаление записей
Маршрут и функция для удаления:
Route::get('/contact/{id}/delete', [ContactController::class, 'deleteMessage'])->name('contact.delete');
public function deleteMessage($id)
{
Contact::destroy($id);
return redirect()->route('contact.all')->with('success', 'Сообщение было удалено');
}
Функция удаляет запись и перенаправляет на страницу со списком сообщений.
Создали отдельные страницы для отображения, редактирования и удаления записей, используя маршрутизацию, контроллеры и шаблоны Blade. Все операции выполняются с использованием модели данных Contact и методов Eloquent.