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でテストコードを書くまでの勉強メモ(チュートリアルの基本タスクリストの開発にトライ その1)

Last updated at Posted at 2019-07-31

背景

  • Laravelについて学習し、開発環境を構築した
  • ただテストを書くためにはテストをするアプリケーションが必要
  • Laravelの知識を深めるためにLaravel 5.2のイントロダクションの基本タスクリストをLaravel 5.8で作成してみる

Laravelをインストール

お決まりのLaravelインストール

composer create-project --prefer-dist laravel/laravel quickstart

を実行する。

DBの準備

migrationファイル作成

タスク保持のためのテーブルを定義する。
テーブル定義のためのmigrationファイル作成はmake:migrationコマンドを使う。

php artisan make:migration create_tasks_table --create=tasks

実行し、database/migrationsを覗くと
2019_XX_XX_XXXXXX_create_tasks_table.php
を発見。
つまり上記コマンドは、
「Y_m_d_His_create_tasks_table.phpというmigrationファイルを作ってくれや。
「tasks」ってテーブルを新たに作成するで。」ということらしい。
開いてみると以下のようになっていた。


<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateTasksTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('tasks', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name'); //追記分
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('tasks');
    }
}

upメソッドは新しいテーブル、カラム、インデックスをデータベースに追加するために使用するメソッド、downはその逆とのことなので、id,日付に加えてタスク名を保存するカラムを追加するための記述を追記した。

migrationファイルの実行

上記で作成したファイルは以下コマンドで実行できる。

php artisan migrate

Eloquentモデル

EloquentとはLaravelのデフォルトORM(※データベースとオブジェクト指向プログラミング言語の間の非互換なデータを変換するプログラミング技法を実現する仕組み)

作ったばかりのtasksデータベーステーブルに対応するTaskモデルを定義するために、以下コマンドを実行する。

php artisan make:model Task

実行後appを覗くとTask.phpを発見。
開いてみると以下のようになっていた。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Task extends Model
{
    //
}

具体的な記述はまだ空っぽ。

ルート定義

ルートのスタブを定義

※実際のオブジェクトを置き換えて、 設定した何らかの値を (オプションで) 返すようなテストダブルのことを スタブ と言う

タスク表示、タスク追加、タスク削除の3つのルートをroutesディレクトリ内のファイルで定義する。

routes/web.php
<?php

use App\Task;
use Illuminate\Http\Request;

/**
 * タスクダッシュボード表示
 */
Route::get('/', function () {
    //
});

/**
 * 新タスク追加
 */
Route::post('/task', function (Request $request) {
    //
});

/**
 * タスク削除
 */
Route::delete('/task/{task}', function (Task $task) {
    //
});

ビューの表示

/ルートを定義する。
上記routes/web.phpのget部分を

Route::get('/', function () {
    return view('tasks'); //追記分
});

のように記載するとview関数に渡したtasksは、resources/views/tasks.blade.phpテンプレートに対応するビューオブジェクトインスタンスを生成する。

レイアウトとビューの作成

レイアウト定義

ビューを作成する。
ビューを置くresources/views以下にlayouts/app.blade.phpを定義して、内容はチュートリアルに記載のものとする。

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>Laravel Quickstart - Basic</title>

        <!-- CSSとJavaScript -->
    </head>

    <body>
        <div class="container">
            <nav class="navbar navbar-default">
                <!-- ナビバーの内容 -->
            </nav>
        </div>

        @yield('content')
    </body>
</html>

子ビューの定義

新しいタスクを作成するためのフォームと、存在する全タスクを同時に表示するビューを定義する。
resources/views以下にtasks.blade.phpを定義して、内容はチュートリアルに記載のものとする。

@extends('layouts.app')

@section('content')

    <!-- Bootstrapの定形コード… -->

    <div class="panel-body">
        <!-- バリデーションエラーの表示 -->
        @include('common.errors')

        <!-- 新タスクフォーム -->
        <form action="{{ url('task') }}" method="POST" class="form-horizontal">
            {{ csrf_field() }}

            <!-- タスク名 -->
            <div class="form-group">
                <label for="task" class="col-sm-3 control-label">Tasks</label>

                <div class="col-sm-6">
                    <input type="text" name="name" id="task-name" class="form-control">
                </div>
            </div>

            <!-- タスク追加ボタン -->
            <div class="form-group">
                <div class="col-sm-offset-3 col-sm-6">
                    <button type="submit" class="btn btn-default">
                        <i class="fa fa-plus"></i> Create Task
                    </button>
                </div>
            </div>
        </form>
    </div>

    <!-- TODO: 現在のタスク -->
@endsection

@extendsディレクティブ:resources/views/layouts/app.blade.phpに定義したレイアウトを使用する
@section('content')から@endsectionの間のコンテンツ:app.blade.phpレイアウトの中の@yield('content')ディレクティブの場所に挿入される
@include('common.errors'):resources/views/common/errors.blade.phpに設置されているテンプレートをロードする

タスク追加の機能を足す前に/ルートの表示確認がしたいので、
resources/views/common/errors.blade.phpを定義する。

内容はチュートリアルに記載のものとする。

@if (count($errors) > 0)
    <!-- Form Error List -->
    <div class="alert alert-danger">
        <strong>Error! !</strong>

        <br><br>

        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

ここまでを行い一度表示を確認する。
その1.JPG

表示された!(Bootstrap CSSの定形コードを省いているので、表示はダサいが致し方なし。。。)

かなり長くなりそうなので、タスク追加と削除は次記事でまとめる。

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?