Laravelチュートリアル6
step.6では、
・edit(編集・更新画面)
・update(更新処理)
について説明していきます。
edit (編集・更新画面)と update(更新処理)
edit()編集・更新画面
編集画面のviewを作成します。
resources/views/直下にtasksフォルダにedit.blade.phpを作成します。
resources/views/tasks/edit.blade.php
@extends('layouts.app')
@section('content')
<div class="container-fluid">
<div class="row">
<div class="col-12">
<h3>{{ $task->name }}の編集</h3>
<hr />
</div>
<div class="col-md-6">
<form action="{{ route('tasks.update', $task) }}" method="post" enctype="multipart/form-data">
@csrf
@method('put')
@include('tasks._form')
</form>
</div>
</div>
</div>
@endsection
ここでも、
@include('tasks._form')
して、共通化しています。
edit() は、 Task $task オブジェクトでレコードを検索し、 既存のレコードを編集します。
store と違って update のルーティングには Task $task を渡す必要があります。
<form action="{{ route('tasks.update', $task) }}" method="post" enctype="multipart/form-data">
配列に $task を入れることで update の URL /tasks/{task} の {task} に id が指定されます。
Controller
TaskControllerにedit()とupdate()の処理を書き足したコードです。
app/Http/Controllers/TasksController.php
public function edit(Task $task)
{
return view('tasks.edit', compact('task'));
}
public function update(Request $request, Task $task)
{
$task->name = $request->input('name');
$task->status = $request->input('status');
$task->deadline = $request->input('deadline');
$task->save();
return redirect()->route('tasks.index');
}
@edit編集・更新画面
public function edit(Task $task)
{
return view('tasks.edit', compact('task'));
}
index()の時と同様にview() で、tasks.editを呼び出しています。
@update()更新画面
update は store に似ています。
違いは $task で検索し、更新するところです。
public function update(Request $request, Task $task)
{
$task->name = $request->input('name');
$task->status = $request->input('status');
$task->deadline = $request->input('deadline');
$task->save();
return redirect()->route('tasks.index');
}
編集・更新されたフォームの内容は $request の中です。
$request から name や status 、deadline を取り出して、編集・更新を $task に代入し、
$task->save();
保存します。
updateアクションは更新後、 / (一覧画面)へリダイレクトしています。
index の view からedit の view へ遷移できるリンクを作成します。
resources/views/tasks/index.blade.php
@extends('layouts.app')
@section('content')
<h3>タスク一覧</h3>
<hr />
@if (count($tasks) > 0)
<table class="table">
<thead>
<tr>
<th>ID</th>
<th>タスク名</th>
<th>ステータス</th>
<th>期限</th>
<th>更新日時</th>
</tr>
</thead>
<tbody>
@foreach ($tasks as $task)
<tr>
<td>{{ $task->id }}</td>
<td>{{ $task->name }}</a></td>
<td>{{ $task->status}}</td> ->description
<td>{{ $task->deadline}}</td>
<td><a href="{{ route('tasks.edit', $task) }}" class="btn btn-primary">編集</a></td>
</tr>
@endforeach
</tbody>
</table>
@endif
<a href="{{ route('tasks.create') }}" class="btn btn-primary">新規登録</a>
@endsection
まとめ