Laravel: Редактирование и удаление записей

Реализуем редактирование, удаление и отображение записей на отдельных страницах.

Кнопка «Подробнее»

Для реализации кнопки «Подробнее», определим 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.

Что будем искать? Например,программа