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/
すると、
無事に表示されました。
次に、
Route::post('/sample', function(Request $request){ $sample = new Sample; $sample->title = $request->name; $sample->save(); return redirect('/'); });
と記述することで、フォームに入力し「サンプルを追加する」ボタンを押すと無事に追加されます。
次に、削除の処理を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を確認。
入力された項目が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 井上 博樹先生の講座