Laravel5基本機能Tips&ブロックチェーン

#概要#

目的：MVCのWebアプリケーション開発用のオープンソースであるLaravelについて基本機能を調査して記録した。今後、欲しい情報をAPIなどからバックエンドで取得し見やすいUIにまとめグラフ化する予定である。

#開発環境#

-PHP５
-MySQL
-laravel5
- ローカル
- mac osx 
- （XAMPP)
- Vscode
- 未定：リモートレンタルサーバー(AWS)、Docker
ーNanoppol API

主な参照記事：Laravel5 入門 インストールからMVCの基本機能をさっと眺める
[リンク](https://blog.hrendoh.com/getting-start-and-overview-of-laravel5/）

1 インストール&ローカル環境構築手順（Windows、Mac)
2 ルーティング
３コントローラー
４ ビュー
　４.1 基本的なビューの呼び出し方
　４.2 Bladeテンプレート
　４.3 Asset
５データベース操作
　５.1 接続設定
　５.2 モデル (ORM)
　５.3 マイグレーション
　５.4 モデルの利用
６ テスト
　６.1 データベースを利用するテスト
　６.2 テストデータベースのマイグレーション
7  標準機能について	
　７.１Authについて
　７.2 使用可能なライブラリについて
　７.3 JavaScriptフレームワークについて（Vue.jsなど）

8　 その他
 　８.１　よく使うコマンドや実装について
　　　　　　　　　
#１　インストール&ローカル環境構築手順（Windows、Mac)

　　   Laravel プロジェクトの作成

     
　　Laravelインストール手順は、上記の手順を参照

`$ composer create-project laravel/laravel --prefer-dist
<project name>`

　　
`$ php artisan serve
Laravel development server started on http://localhost:8000/`
         artisanコマンドは、 Artisan CLI Usage を参照。artisan listで使用可能なコマンドは右のコマンドで確認できる。


`$ php artisan list`

#２ルーティング#
　	ルーティングは app/Http/routes.php に記述する
##// app/Http/routes.php
	<?php
	Route::get('/', 'WelcomeController@index');
　　　上記は、プロジェクトの作成後のデフォルト、’/’を
　　　WelcomeControllerの　indexメソッドにマッピングしている

#３コントローラー#

コントローラーは、app/Http/Controllersに
App\Http\Controllers\Controllerを継承するクラスを置く
artisanコマンドでもコントローラーを生成可能
$ php artisan make:controller ArticleController
生成されるコントローラーはRestfullなリソースアクセスを提供する
RESTful Resource Controllers

#４ ビュー#

基本的なビューの呼び出し方
概要は、The BasicsのViews を参照
ビューのファイルは、resources/viewsに置く
ビューへ渡すデータは、view関数の第二引数に渡す
return view('greeting', ['name' => 'James']);
ビュー側は以下のように、渡されたマップのキーで値を参照できる

`// resources/views/greeting.php
	<html>
	<body>
	<h1>Hello, <?php echo $name; ?></h1>
	</body>
	</html>`

resources/viewsのサブディレクトリに配置したビューの呼び出しは、以下のようにドットで連結して呼び出す(‘/’でも呼び出せる)

`return view('article.create');`

#Asset#
Laravel5 では、CSS、JavascriptをビルドするGulp タスク Laravel Elixir が標準で提供されている
プロジェクト直下のgulpfile.jsを見てみると、resources/assets/less/app.lessをビルドするタスクがはじめから設定されている

        // gulpfile.js
	var elixir = require('laravel-elixir');

	elixir(function(mix) {
	mix.less('app.less');
	});

npm実行環境とgulpをインストールして、プロジェクト直下にて以下のコマンドを実行する

`$ npm install`

開発中はgulp watchしておけば、lessの修正が自動で反映される

`$ gulp watch`

#５ データベース操作#
Basic Database Usage の Configuration によると対応データベースは、
MySQL, Postgres, SQLite, SQL Server と豊富
参照URL:laravel データベースの接続、マイグレーションによる

テーブル作成
https://qiita.com/ryo2132/items/a1c8119b00799d3aed00
         LaravelでMAMPのMySQLに接続する
https://qiita.com/kei4eva4/items/480448b83df25774fc74

#接続設定#
データベースへの接続設定は、config/database.phpに記述する
Laravelのルートディレクトリ.envがあり、環境ごとの設定はこちらに記述
Environmentの設定については、LaravelはDotEnv PHPを利用する
MySQLを使用し Read/Write接続を分けない場合は、config/database.phpではなく.envに接続情報を記述する
デフォルトは以下の.env.exampleがインストール時に.envにコピーされる
(homesteadは、MySQLが.env.exampleの内容に合わせてセットアップ済み)

#// .env#

	APP_ENV=local
	APP_DEBUG=true
	APP_KEY=SomeRandomString

	DB_HOST=localhost
	DB_DATABASE=homestead
	DB_USERNAME=homestead
	DB_PASSWORD=secret

	CACHE_DRIVER=file
	SESSION_DRIVER=file
	QUEUE_DRIVER=sync

	MAIL_DRIVER=smtp
	MAIL_HOST=mailtrap.io
	MAIL_PORT=2525
	MAIL_USERNAME=null
	MAIL_PASSWORD=null
	MAIL_ENCRYPTION=null

参考: Laravel 5.0 – Environment Detection & Environment Variables
モデル (ORM)

Laravelには、Eloquent ORMというActiveRecord実装がある
モデル生成の artisan コマンドが用意されている

`$ php artisan make:model Article`

app直下に以下のBlog.phpが生成される

#// app/Blog.php#
     `<?php

      namespace App;

     use Illuminate\Database\Eloquent\Model;

      class Article extends Model
     {
      //
      }

$tableプロパティに明示的にテーブル名を指定していないので、
このArticleクラスの場合は、articlesテーブルにアクセスする

マイグレーション

上記のArticleモデルを保存するarticlesテーブルを追加する
マイグレーションを作成する場合、以下のように

     artisan mke:migration コマンドを実行する
     $ php artisan make:migration create_articles_table
     Created Migration: 2015_06_09_164737_create_articles_table

マイグレーションファイルはdatabase/migrationsに作成される
(モデル作成時、artisan make:modelコマンドにオプション-mを付けると、モデルと同時にマイグレーションも生成される)
マイグレーションの書き方はWriting Migrationを参照
オートインクリメントのレコードIDと、文字列のtitleとtextをフィールドに持つarticlesテーブルを作成するマイグレーションは以下のようになる

      database/migrations/2015_06_09_164737_create_articles_table

     <?php
     use Illuminate\Database\Schema\Blueprint;
     use Illuminate\Database\Migrations\Migration;

     class CreateArticlesTable extends Migration
      {
       /**
        * Run the migrations.
        *
        * @return void
        */
           public function up()
         { 
             Schema::create('articles',                  
             function($table)
             {
             $table->increments('id');
             $table->string('title');
             $table->text('text');
             $table->timestamps();});
                                    }
         /**
         * Reverse the migrations.
         *
         * @return void
         */
            public function down()
         {
            Schema::drop('articles');
                                   }
                                    }

timestampsは、インスタンスのdateTime型のupdated_atおよびcreated_at列マイグレーションはmigrateコマンドで適用
$ php artisan migrate　
Illuminate/Database/Eloquent/Model – Laravel API
モデルの利用
コントローラーでモデルを利用するには、インポートする
モデル操作は、Modelクラスのファサードおよびインスタンスメソッドで行う
Illuminate/Database/Eloquent/Model – Laravel API

#RESTFullコントローラーの実装例#
    // app/Http/Controllers/ArticleController" highlight="7, 15, 21
    <?php
      namespace App\Http\Controllers;
      use Illuminate\Http\Request;
      use App\Article;
      use App\Http\Requests;
      use App\Http\Controllers\Controller;
      class ArticleController extends Controller
       {
       public function index()
       {
         $articles = Article::all();
         return view('article.index', ['articles' => $articles];  }
          public function destroy($id)
         {
        $article = Article::find($id);
        $article->delete(); }}

#６ テスト#
データベースを利用するテスト
Laravel5では、テスト時にデータベースを切り替える仕組みを標準で用意していない
必要な環境変数はphpunit.xmlに記述する
データベースだけ切り替られれば良いのでDB_DATABASEのみ追加する

// phpunit.xml
	<env name=DB_DATABASE" value="homestead_testing"/>
テストデータベースのマイグレーション
マイグレーションは、DatabaseMigrationsトレイトを利用して、テストごとにMigrationを実行する

      //tests/ArticleTest
      <?php
      use Illuminate\Foundation\Testing\WithoutMiddleware;
      use Illuminate\Foundation\Testing\DatabaseMigrations;
      use Illuminate\Foundation\Testing\DatabaseTransactions;

        class ArticleTest extends TestCase
           {
               use DatabaseMigrations;
                                        }

#7  標準機能について
	
7.１Authについて
    Laravel5.2からmake:authでViewが生成できるようになった
                 参照：Laravelの標準Authentication(Auth)の動きを調べてみる
　　　
       ７.2　使用可能なライブラリについて	
            Laravelと合わせて使いたいライブラリ
     ・Pusher
　　　　　PusherはPHPでwebsocket(双方向データ通信)を行うためのライブラリ　
  　　　　参照URL:PusherはPHPでwebsocket(双方向データ通信)を行う
     ・Carbon
         　　PHPで時間を扱うDateTimeのラッパーライブラリ。
 
　　　参照URL:PHPで日付時刻処理を書くならCarbonを使うべき
     参照URL:Laravelと合わせて使いたいライブラリ5選
      
７.3 JavaScriptフレームワークについて（Vue.jsなど）
      Laravelとフロントエンド


Laravelでは、5.3から、Vue.jsが標準のJavaScriptフレームワークになっているさらに、5.4では、フロントエンドのビルドツールが、gulpベースのElixirから、WebpackベースのMixに変わった。Laravelをインストールすれば、Web APIはLaravelで作って、SPA(Single Page Application)をVue.jsで組む、といったことが簡単にできるようになっている      
         
#８.１　よく使うコマンドや実装について

参照URL:
https://walking-succession-falls.com/laravel%E3%81%AE%E5%9F%BA%E6%9C%AC%E6%A9%9F%E8%83%BD%E3%80%81%E3%81%A1%E3%82%87%E3%81%A3%E3%81%A8%E3%81%97%E3%81%9F%E5%B0%8F%E6%8A%80%E3%81%BE%E3%81%A8%E3%82%81/