Help us understand the problem. What is going on with this article?

Laravel初心者がLaravelでテストコードを書くまでの勉強メモ(チュートリアルの基本タスクリストの開発にトライ その2)

More than 1 year has passed since last update.

背景

前記事の続き
・タスク追加、削除処理を追記する

タスク追加

フォームの用意ができたので、次に追加の処理を記載する。

バリデーション

タスク名の入力が
・必須
・255文字以下
になるようバリデーションを設定。
タスク追加のルート部分に以下を追記する。

routes/web.php
Route::post('/task', function (Request $request) {
    $validator = Validator::make($request->all(), [
        'name' => 'required|max:255',
    ]);

    if ($validator->fails()) {
        return redirect('/')
            ->withInput()
            ->withErrors($validator);
    }

    // タスク作成処理…
});

タスク作成

入力値をsaveメソッドで保存、その後一覧へリダイレクトするようにする。

routes/web.php
Route::post('/task', function (Request $request) {
    $validator = Validator::make($request->all(), [
        'name' => 'required|max:255',
    ]);

    if ($validator->fails()) {
        return redirect('/')
            ->withInput()
            ->withErrors($validator);
    }

//追記したタスク作成処理
    $task = new Task;
    $task->name = $request->name;
    $task->save();

    return redirect('/');
});

既存タスク表示

/ルート部分に以下を追記し、タスクは作成日時順に表示する。
view関数は第2引数を使ってビューで使用するデータを渡すことができる。

route/web.php
Route::get('/', function () {
    $tasks = Task::orderBy('created_at', 'asc')->get();

    return view('tasks', [
        'tasks' => $tasks
    ]);
});

ビューは前回作成したフォームに、登録したタスクをループで表示する処理を加える。

tasks.blade.php
@extends('layouts.app')
@section('content')
<!-- フォーム -->

    @if (count($tasks) > 0)
        <div class="panel panel-default">
            <div class="panel-heading">
                Tasks
            </div>

            <div class="panel-body">
                <table class="table table-striped task-table">

                    <!-- テーブルヘッダ -->
                    <thead>
                        <th>Task</th>
                        <th>&nbsp;</th>
                    </thead>

                    <!-- テーブル本体 -->
                    <tbody>
                        @foreach ($tasks as $task)
                            <tr>
                                <!-- タスク名 -->
                                <td class="table-text">
                                    <div>{{ $task->name }}</div>
                                </td>

                                <td>
                                    <!-- TODO: 削除ボタン -->
                                </td>
                            </tr>
                        @endforeach
                    </tbody>
                </table>
            </div>
        </div>
    @endif
@endsection

タスク削除

削除ボタンの追加

ビューに削除ボタンを設置。

tasks.blade.php
@extends('layouts.app')
@section('content')

<!-- フォームとかタスク一覧とか -->

    <td>
        <form action="{{ url('task/'.$task->id) }}" method="POST">
            {{ csrf_field() }}
            {{ method_field('DELETE') }}

            <button type="submit" class="btn btn-danger">
                <i class="fa fa-trash"></i> Delete
            </button>
        </form>
    </td>

タスク削除

deleteルート部分に以下を追記し、削除処理を行うようにする。

route/web.php
Route::delete('/task/{task}', function (Task $task) {
    $task->delete();

    return redirect('/');
});

これで実装完了!
次回からいよいよテストを書く!

shimomai@github
某webサービスのテスター。 主に忘備録を投稿予定。
sencorp
幼稚園・保育園向けインターネット写真サービス「はいチーズ!」を提供しています。
https://sencorp.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away