【show.blade.php】
<h1>
<span>{{ $post->title }}</span>
<a href="{{ route('posts.edit', $post) }}">[Edit]</a>
</h1>
【edit.blade.php】
<form method="post" action="{{ route('posts.update', $post) }}">
@method('PATCH')
<input type="text" name="title" value="{{ old('title', $post->title) }}">
<textarea name="body">{{ old('body', $post->body) }}</textarea>
【Controller.php】
public function edit(Post $post)
{
return view('posts.edit')
->with(['post' => $post]);
}
public function update(Request $request, Post $post)
{
$request->validate([
'title' => 'required|min:3',
'body' => 'required',
], [
'title.required' => 'タイトルは必須です',
'title.min' => ':min 文字以上入力してください',
'body.required' => '本文は必須です',
]);
$post->title = $request->title;
$post->body = $request->body;
$post->save();
return redirect()
->route('posts.show', $post);
}
【routes/web.php】
Route::get('/posts/{post}/edit', [PostController::class, 'edit'])
->name('posts.edit')
->where('post', '[0-9]+');
Route::patch('/posts/{post}/update', [PostController::class, 'update'])
->name('posts.update')
->where('post', '[0-9]+');
参考:ドットインストール『Laravel 8入門 CRUD処理編』