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

https://itproger.com/course/laravel/7

Страница просмотра записей

В routes/web.php создадим новый рут для просмотра одной записи:

Route::get('/contact/all/{id}', 'ContactController@showOneMessage')->name('contact-data-one');

В resources/views/messages.blade.php добавим кнопку для перехода на страницу записи:

<a href="{{ route('contact-data-one', $el->id) }}"><button class="btn-success btn">Детальнее</button></a>

Создадим функцию showOneMessage в app/Http/Controllers/ContactController.php:

public function showOneMessage(int $id) {
        $contact = new Contact;
        return view('one-message', ['data' => $contact->find($id)]);
    }

и вью resources/views/one-message.blade.php с содержимым:

@extends('layouts.app')

@section('title-block'){{ $data->subject }}@endsection

@section('content')
<h1>{{ $data->subject }}</h1>
<div class="alert alert-info">
    <p>{{ $data->message }}</p>
    <p>
        <small>{{ $data->created_at }}</small>
    </p>
</div>
@endsection

Теперь на странице http://laratest.loc/contact/all/1 у нас показывается первая запись и так далее.

Страница редактирования записи

Создадим новый роут в routes/web.php :

Route::get('/contact/all/{id}/update', 'ContactController@update')->name('contact-update');

В app/Http/Controllers/ContactController.php создадим функцию для обновления:

public function update(int $id) {
        $contact = new Contact;
        return view('update-message', ['data' => $contact->find($id)]);
    }

И создадим вью для обновления resources/views/update-message.blade.php :

@extends('layouts.app')

@section('title-block')Контакты@endsection

@section('content')
    <h1>Контакты</h1>
    <form action="{{route('contact-update-submit', $data['id'])}}" method="post">
        @csrf

        <div class="form-group">
            <label for="name">Введите имя:</label>
            <input type="text" name="name" value="{{ $data['name'] }}" placeholder="Введите имя" id="name" class="form-control">
        </div>
        <div class="form-group">
            <label for="email">Email:</label>
            <input type="text" name="email" value="{{ $data['email'] }}" placeholder="Введите email" id="email" class="form-control">
        </div>
        <div class="form-group">
            <label for="subject">Тема сообщения:</label>
            <input type="text" name="subject" value="{{ $data['subject'] }}" placeholder="Введите имя" id="subject" class="form-control">
        </div>
        <div class="form-group">
            <label for="message">Тема сообщения:</label>
            <textarea name="message" id="message" cols="30" rows="10" class="form-control" placeholder="Введите сообщение...">{{ $data['message'] }}</textarea>
        </div>
        <button class="btn btn-success" type="success">Отправить</button>
    </form>
@endsection

Это копия resources/views/contact.blade.php , с подставленными по id значениями из базы и измененным action у формы .

Обработка данных из формы после редактирования

Создадим роут для обработчика формы:

Route::post('/contact/all/{id}/update', 'ContactController@updateSubmit')->name('contact-update-submit');

В app/Http/Controllers/ContactController.php функцию для обработки нашего сообщения:

    public function updateSubmit(int $id, ContactRequest $req) {
        $contact = Contact::find($id);
        $contact->name = $req->input('name');
        $contact->email = $req->input('email');
        $contact->subject = $req->input('subject');
        $contact->message = $req->input('message');

        $contact->save();

        return redirect()->route('contact-data-one', $id)->with('success', 'Сообщение было обновлено');
    }

Теперь наше сообщение обновляется, а после мы перенаправляем пользователя на страницу с измененным сообщением.

Страница удаления записи

В resources/views/messages.blade.php добавим кнопку Удалить:

<a href="{{ route('contact-delete', $el->id) }}"><button class="btn-danger btn">Удалить</button></a>

В routes/web.php пропишем рут для нее:

Route::get('/contact/all/{id}/delete', 'ContactController@delete')->name('contact-delete');

И в контроллере app/Http/Controllers/ContactController.php запишем функцию для этого:

    public function delete(int $id) {
        $contact = Contact::find($id);
        $contact->delete();

        return redirect()->route('contact-data')->with('success', 'Сообщение "' . $contact->name . '" было удалено');
    }
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии