イベント

初心者用Laravelアプリケーション作成基本の流れ

Udemyにて井上 博樹先生の【2日でできる】はじめての PHP x Laravel 5 入門というコースでLaravelを勉強中です。

それ以外にも英語のLaravelコースを購入して勉強しつつも壁にぶつかりしばらく放置したりと、なかなか集中できずにまだまだ初心者中。とはいえ、Laravelを使ったAPIを年内につくる必要性がでてきたので、あらためて今まで勉強したことを整理しつつ、自分のアプリケーション開発をすすめていきたいとおもいます。

まずは、井上先生の講座の内容に自分メモを加えまとめてみました。

LaravelでWebアプリを開発する基本の流れ

こちがら井上先生の講座で紹介されていたWebアプリを開発する基本の流れです。

1.何をつくるかを決める

2.データベーステーブルのマイグレーションファイルを生成

3.フィールド定義をマイグレーションファイルに追加

4.マイグレーションを実行(テーブルが生成される)

5.ページテンプレートを作成(Blade.phpファイル)

6.ルーティング処理を記述(app/Http/routes.php)

7.内蔵サーバを起動

8.動作を確認

この流れの確認と、後から見た時に具体的に何をすればよいのかをメモしておきます。

Laravel準備編

新しいLaravelをインストールします。

ターミナルから下記を入力。今回はLaravel 5.2でインストールしました。

composer create-project "laravel/laravel=5.2.*" test

MAMPにてMySQLのDBを1つ作成。  DB名:Lv_test

井上先生の講座ではsqliteでおこなっていますが、私の場合はMAMPで動かしているMySQLのDBを使っているので、.envにMAMPのMySQLを使う為の記述とアカウント情報(DB名とDBパスワード)を入力。

DB_SOCKET = /Applications/MAMP/tmp/mysql/mysql.sock

これで準備完了

1.何をつくるかを決める

つくりたいものは、「外部APIで取得したJSONデータをDBテーブルに格納する」Webアプリ。

まずは、講座にあった読書リストと同じようにフォームから手入力しDBに格納するアプリをつくり、その後にAPIを読み込みDBに書き込むように変更を行う。

2.データベーステーブルのマイグレーションファイルを生成

samplesというテーブルをつくるためのマイグレーションファイルを生成します。

php artisan make:migration create_samples_table --create=samples

生成されるのはこちらのファイル。

database/migrations/2017_10_31_232810_create_samples_table.php

3. フィールド定義をマイグレーションファイルに追加

マイグレーションファイルを編集します。

テーブルに、title,title_number,title_qtyの3つのカラムをつくります。

public function up()
    {
        Schema::create('samples', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title');
            $table->string('title_number');
            $table->integer('title_qty');
            $table->timestamps();
        });
    }

4.マイグレーションを実行(テーブルが生成される)

php artisan migrate

4(補足) モデルを追加する

DBのテーブルと紐付けるために、sampleモデルを生成します。

php artisan make:model sample

すると
app/sample.php
というモデルファイルが生成されます。

5.ページテンプレートを作成(Blade.phpファイル)

共通テンプレート(headerやfooter、sidebarなど)を、layoutsというフォルダをつくり設置する。

フォルダの場所
resources/views/layouts

samples.blade.phpを作成する。

フォルダの場所
resources/views/

samples.blade.phpに共通テンプレートを読み込み記述をする。

@extends('layouts.header')

ルーティング処理を記述(app/Http/routes.php)

ルーティングファイルを編集。

app/Http/routes.php

use App\BookとRequestを設定

use App\Sample;
use Illuminate\Http\Request;

Route::group(['middleware' => ['web']], function(){
  Route::get('/', function(){
    $samples = Sample::all();
    return view('samples',[
      'samples' => $samples
    ]);
  });
}

ここまでで一旦確認。

php artisan serve

で起動させてから、

http://localhost:8000/

すると、

laravel

無事に表示されました。

次に、

  Route::post('/sample', function(Request $request){

      $sample = new Sample;
      $sample->title = $request->name;
      $sample->save();

      return redirect('/');

  });

と記述することで、フォームに入力し「サンプルを追加する」ボタンを押すと無事に追加されます。

laravel

次に、削除の処理をroutes.phpに記述。

  Route::delete('/sample/{sample}', function(Sample $sample){
    $sample->delete();

    return redirect('/');
  });

これで、削除ボタンを押すとレコードが削除できるようになりました

修正

講座のアプリでは、本の名前しか登録できませんでしたが、自分がつくるアプリにあわせ、本の番号と数量の2項目を入力しデータベースに登録出来るようにします。

まずは、入力フォームの方。

<div class="form-group">
							<label for="task-name" class="col-sm-3 control-label">Name</label>

							<div class="col-sm-6">
								<input type="text" name="name" id="sample-name" class="form-control" value="{{ old('sample') }}">
							</div>
						</div>

						<div class="form-group">
							<label for="task-name" class="col-sm-3 control-label">Name Number</label>

							<div class="col-sm-6">
								<input type="text" name="name_number" id="name-number" class="form-control" value="{{ old('sample') }}">
							</div>
						</div>

						<div class="form-group">
							<label for="task-name" class="col-sm-3 control-label">Name Qty</label>

							<div class="col-sm-6">
								<input type="text" name="name_qty" id="name-qty" class="form-control" value="{{ old('sample') }}">
							</div>
						</div>

もともとかかれていたNameのform-groupをそのままコピーして、Name NumberとName Qtyのフォームを追加しました。

サンプル

今度はroutes.phpに、Name NumberとName qtyの値をモデルと関連付ける記述をします。

  Route::post('/sample', function(Request $request){

      $sample = new Sample;
      $sample->title = $request->name;
      $sample->title_number = $request->name_number;
      $sample->title_qty = $request->name_qty;
      $sample->save();

      return redirect('/');

  });
サンプル

この様に入力してから、MAMPのphpmyadminでMySQLを確認。

Localhost localhost Lv test02 samples phpMyAdmin 4 6 5 2

入力された項目がDBに登録されました。

次は、DBの項目が一覧に表示されるようにします。

<td class="table-text"><div>{{ $sample->title }}</div></td>
<td class="table-text"><div>{{ $sample->title_number }}</div></td>
<td class="table-text"><div>{{ $sample->title_qty }}</div></td>

もともとはtableのtdタグに$sample->titleと記述でタイトルだけを表示していましたが、これをコピーしてtitle_numberとtitle_qtyを追加しました。

サンプル

無事に表示もできました。

まとめ

私がつくりたいアプリは、「外部APIで取得したJSONデータをDBテーブルに格納する」というもの。

あとは外部のAPIからtitle, title_number, title_qtyの値を取得することができれば、DBに入れることはできそうです。

次は外部APIからLaravelでJSONを取得することに挑戦したいとおもいます。

↓ Udemy 井上 博樹先生の講座