1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

背景

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

タスク追加

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

バリデーション

タスク名の入力が
・必須
・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('/');
});

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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?