Обновление данных
Шаг 1: Создание страниц
Сначала надо указать две страницы, один для вывода формы редактирования, и вторую, где будет происходить само обновление странцы.
// routes/web.php
use App\Http\Controllers\PageController;
Route::get('/pages/{id}/edit', [PageController::class, 'edit']);
Route::put('/pages/{id}', [PageController::class, 'update']);
Данные способы указаны в документации Laravel.
Данные страницы сейчас может открыть любой пользователь. Указать, чтобы они были доступны только авторизованным, можно через код ниже:
// routes/web.php
Route::get('/pages/{id}/edit', [PageController::class, 'edit'])->middleware('auth');
Route::put('/pages/{id}', [PageController::class, 'update'])->middleware('auth');
Также стоит обратить внимание, что для обновления страницы задан тип запроса «PUT».
Шаг 2: Создание страницы редактирования
В файле контроллера надо указать шаблон, в котором будет выводиться страница редактирования.
// app/Http/Controllers/PageController.php
use Illuminate\View\View;
class PageController extends Controller
{
public function edit($id): View
{
// выбираем данные страницы, иначе показываем 404
$page = Page::where(['id' => $id])->firstOrFail();
return view('pages.edit', ['page' => $page]);
}
}
В методе view() указано, что надо вывести шаблон из файла «resources/
Теперь надо вывести саму форму:
<!-- resources/views/layouts/edit.blade.php -->
@section('title', 'Изменение страницы')
<x-app-layout>
<form method="post" action="/pages/{{ $page->id }}">
@method('PUT')
@csrf
<input type="text" name="title" value="{{ $post->title }}">
</form>
</x-app-layout>
В теге <form> внутри атрибута «action» указана ссылка, на которой будет обновляться страница.
Если ссылка поменяется, то форма будет ввести на неактуальную страницу. В этом случае для ссылки обновления стоит дать имя.
// routes/web.php
Route::put('/pages/{id}', [PageController::class, 'update'])->name('page-update');
И указать её в форме:
<!-- resources/views/layouts/edit.blade.php -->
<form method="post" action="{{ route('page-update', [$page->id]) }}">
@method('PUT')
@csrf
<input type="text" name="title" value="{{ $post->title }}">
</form>
Также стоит обратить внимание, что для формы заданы @method('PUT') и @csrf.
Первая задаёт для формы тип запроса «PUT», а вторая предотвращает CSRF-атаку.
Шаг 3: Сохранение данных
Теперь при отправки данных с формы, её надо сохранить в базе данных. Делается это через код ниже:
// app/Http/Controllers/PageController.php
use Illuminate\Http\{Request, RedirectResponse};
use Illuminate\Support\Facades\Redirect;
class PageController extends Controller
{
public function update($id, Request $request): RedirectResponse
{
$page = Page::where(['id' => $id])->first();
$page->title = $request->post('title');
$page->content = $request->post('content');
$page->save();
$request->session()->flash('success', 'Страница успешно обновлена');
return Redirect::route('page-edit', [$id]);
}
}
Поддержать автора
Все статьи создаются и поддерживаются одним человеком,
если вам нравится контент, вы можете поддержать автора сайта
