LoginSignup
16

More than 5 years have passed since last update.

PHP7 + Laravel で Restful API を爆速開発する 2

Last updated at Posted at 2016-03-04

テストの書き方

  • テストファーストにこだわらなくても良い
  • けど新しいプロジェクトならテストファーストでもいい
  • とくにAPIの開発にはテスト書いたほうが楽

掲示板を見る機能

  • get でデータを取得する
  • データは json で返って来て欲しい。
IndexTest.php
<?php

use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;

class IndexTest extends TestCase
{
    /**
     * A basic functional test example.
     *
     * @return void
     */
    public function testGet()
    {
        $response = $this->call('GET', '/');
        $this->assertEquals(['title' => 'test', 'body' => 'hello'], $response->getContent());
    }
}

と、書いて実行。

スクリーンショット 2016-02-19 16.50.58.png

当然のエラー。なぜなら何も実装してないから。そこで、このテストが通るように実装する。まずはコントローラーと呼ばれる部分に GET method を実装する。
Laravel ではルーティングは app/Http/routes.php に定義するらしい。

routes.php
Route::get('/', 'BoardController@index');

routing に関して、resource という一気に実装する関数があるようだ。特にアクションとメソッドのひも付けはドキュメントを参考にすること。ちなみに自分はどうしてもなじめないので一つずつ実装する。

そして対応するコントローラーをここを参考に作成する。

php artisan make:controller BoardController

app/Http/Controllers 以下に作成されたコントローラーに処理を実装していく。

BoardController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;

class BoardController extends Controller
{
    function index() {
    }
}

ここで対象のテーブルを作る。

php artisan make:migration create_boards_table

database/migrations/ 以下に新しく 20016_hogehoge.php みたいなファイルができているはず。この中にスキーマを定義する。細かいことはここを参照。

定義したら

php artisan migrate
composer dump-autoload

すること。とくに autoload に登録しないとクラスノットとか言われてストレスマッハになるので注意。

ついでにデータも作っておく database/seeds 以下に作るがこれだけ生成コマンドがないので DatabaseSeeder.php をコピペして適当に作る。Model を読むのを忘れないように。

<?php

use Illuminate\Database\Seeder;
use App\Models\Board;

class BoardTableSeeder extends Seeder
{

    public function run()
    {
        DB::table('boards')->truncate();

        DB::table('boards')->insert([
            [
            'title' => 'test',
            'body'       => 'hello',
            'created_at' => '2001-11-30 00:00:00',
            'updated_at' => '2001-11-30 00:00:00',
            ],
            ]);
    }
}

さらに DatabaseSeeder.php に一行追加する。

$this->call(BoardTableSeeder::class);

ここまでの準備で、テーブル作成からデータ投入までがコマンドでいつでもできるようになる。他のメンバーのことを考えてかならずこの手順を踏むこと。

で、実行。

composer dump-autoload
php artisan migrate:refresh --seed

次からは実際にコントローラーを実装する。

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
16