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 から namestatusdeadline を取り出して、編集・更新を $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


まとめ