#概要#
目的:MVCのWebアプリケーション開発用のオープンソースであるLaravelについて基本機能を調査して記録した。今後、欲しい情報をAPIなどからバックエンドで取得し見やすいUIにまとめグラフ化する予定である。
#開発環境#
-PHP5
-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 ルーティング
3コントローラー
4 ビュー
4.1 基本的なビューの呼び出し方
4.2 Bladeテンプレート
4.3 Asset
5データベース操作
5.1 接続設定
5.2 モデル (ORM)
5.3 マイグレーション
5.4 モデルの利用
6 テスト
6.1 データベースを利用するテスト
6.2 テストデータベースのマイグレーション
7 標準機能について
7.1Authについて
7.2 使用可能なライブラリについて
7.3 JavaScriptフレームワークについて(Vue.jsなど)
8 その他
8.1 よく使うコマンドや実装について
#1 インストール&ローカル環境構築手順(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
#2ルーティング#
ルーティングは app/Http/routes.php に記述する
##// app/Http/routes.php
<?php
Route::get('/', 'WelcomeController@index');
上記は、プロジェクトの作成後のデフォルト、’/’を
WelcomeControllerの indexメソッドにマッピングしている
#3コントローラー#
コントローラーは、app/Http/Controllersに
App\Http\Controllers\Controllerを継承するクラスを置く
artisanコマンドでもコントローラーを生成可能
$ php artisan make:controller ArticleController
生成されるコントローラーはRestfullなリソースアクセスを提供する
RESTful Resource Controllers
#4 ビュー#
基本的なビューの呼び出し方
概要は、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
#5 データベース操作#
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(); }}
#6 テスト#
データベースを利用するテスト
Laravel5では、テスト時にデータベースを切り替える仕組みを標準で用意していない
必要な環境変数はphpunit.xmlに記述する
データベースだけ切り替られれば良いのでDB_DATABASEのみ追加する
// phpunit.xml
テストデータベースのマイグレーション
マイグレーションは、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.1Authについて
Laravel5.2からmake:authでViewが生成できるようになった
参照:Laravelの標準Authentication(Auth)の動きを調べてみる
7.2 使用可能なライブラリについて
Laravelと合わせて使いたいライブラリ
・Pusher
PusherはPHPでwebsocket(双方向データ通信)を行うためのライブラリ
参照URL:PusherはPHPでwebsocket(双方向データ通信)を行う
・Carbon
PHPで時間を扱うDateTimeのラッパーライブラリ。
参照URL:PHPで日付時刻処理を書くならCarbonを使うべき
参照URL:Laravelと合わせて使いたいライブラリ5選
7.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で組む、といったことが簡単にできるようになっている
#8.1 よく使うコマンドや実装について