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 . '" было удалено'); }