WEB アプリケーションには、CRUD という機能をつけると良いとされています。 CRUD とは、Create (作成)、Read (読み込み)、Update (更新)、Delete (削除)の頭文字をとったものです。 今回は、Update (更新) 機能をつけていきます。
resources / views / tasks / show.blade.php を次のように変更します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Edit | Task</title>
<link rel="stylesheet" href="{{ url('style.css') }}">
</head>
<body>
<div class="container">
<h1>Edit</h1>
<!-- ここから -->
<form method="POST" action="{{ route('tasks.update', $task )}}">
@csrf
@method('patch')
<div class="h-layout">
<input type="text" name="body" value="{{ old('body', $task->body) }}">
<button class="btn-black">Update</button>
</div>
</form>
<p class="error">
@error('body')
{{ $message }}
@enderror<br></p>
<!-- ここまで変更 -->
<form method="POST" action="{{ route('tasks.destroy', $task) }}">
@csrf
@method('delete')
<p class="h-right">
<button class="btn-black" onclick="return confirm('Sure?');">Delete</button>
</p>
</form>
<p class="h-right">
<a href="{{ route('tasks.index')}}"><button class="btn-black">Back</button></a>
</p>
</div>
</body>
</html>
app / Http / Controllers の TaskController.php に update メソッドを追加します。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Task;
class TaskController extends Controller
{
public function index()
{
$tasks = Task::all();
return view('index')->with(['tasks' => $tasks]);
}
public function store(Request $request)
{
$request->validate([
'body'=>'required|max:30',
]);
$task = new Task();
$task->body = $request->body;
$task->save();
return redirect()->route('tasks.index');
}
public function show(Request $request, Task $task)
{
return view('tasks.show')->with(['task'=>$task]);
}
public function destroy(Task $task)
{
$task->delete();
return redirect()->route('tasks.index');
}
// ここから
public function update(Request $request, Task $task)
{
$request->validate([
'body'=>'required|max:30',
]);
$task->body = $request->body;
$task->save();
return redirect()->route('tasks.index');
}
// ここまで追加します
}
php artisan serve で Task アプリを起動して、localhost:8000 で確認してください。
もし、サーバーの準備ができていたら、「アプリケーションをサーバーにデプロイする」 で、作ったアプリケーションを本番サーバーに設置する方法を説明しています。「bbs」というアプリケーションをデプロイする方法を説明していますが、 「bbs」を適宜「task」に読み替えて使ってみてください。