laravel5 introduction (2014/11/20)
TRANSCRIPT
Laravel5の系譜
• 2014年6月 – Laravel4.2リリース(最新版は4.2.11)
• 2014年9月 – 開発中のLaravel4.3の名称をLaravel5.0に変更
• 2014年11月現在 – Laravel 5.0-‐DEV、Dras0cに変更なう
Laravel5: ベースアーキテクチャ
1. New Folder Structure & App Namespace アプリ構造改革とPHP名前空間の強制。
2. Spiffy Authen0ca0on ユーザー認証パッケージいらず!?
3. Contracts & Method Injec0on さようならファサード。
4. Form Requests オートバリデーション。
Laravel5: 新機能
5. Mul0ple Filesystem (Flysystem based) ファイルI/Oをクラウドストレージにも簡単に。
6. Socialite (BETA) SNS認証をお手軽に。
7. Elixer Laravelに統合されたWebアセット管理。
Laravel5: そのほかにも
8. New Environment Detec0on システム環境に設定しない環境変数の登場。
9. Route Annota0on Pyramid的な、アレ。
10. Event Annota0on Java的な、アレ。
11. Route Caching 12. New File Generator
New Folder Structure ・Laravelを起動するアプリケーションタイプごとにフォルダが用意される
app/Console app/H`p
・アプリケーションタイプごとにオブジェクト構成を指定するKernelが導入される
app/Console/Kernel.php アプリ固有のar0sanコマンド定義など。 app/H`p/Kernel.php middlewareの定義など。
1/12
New Folder Structure Laravel5 Laravel4
app/Console/Commands app/commands
app/H`p/Controllers app/controllers
config app/config
database app/database
resource/lang app/lang
resources/views app/views
bootstrap bootstrap
public public
tests tests
1/12
App Namespace <?php class DashboardController {
// … }
1/12
<?php namespace App\H`p\Controllers; class DashboardController {
// … }
Before:Laravel4 Aker:Laravel5
App Namespace ・PHP名前空間が強制されるようになった。
・指定箇所はcomposer.json ・`php ar0san app:name` コマンドで一括変更可能。
・ファサードが素直に使えなくなった。
・ファサードクラスはグローバル名前空間にある。
1/12
App Namespace ・ファサード問題 app下にPHP名前空間が設定されるようになったため、`Log::debug()`と書くとLogクラスが解決できずエラーとなる。Laravel4でもPHP名前空間を使っていれば同じ問題が起きる。 解決方法は3つ。 1. use文を使う。 use Log; class DashboardController extends Controller { … } 2. ファサードの完全修飾名を指定する。 public func0on getIndex() { \Log::debug(__METHOD__); }
1/12
App Namespace ・ファサード問題(続き) 3. laravel-‐plus/extensionパッケージを入れる。app/addon下の名前空間内でファサードクラスを自動解決してくれる。
<Laravel5-‐DEV> “require”: { “laravel-‐plus/extension": "dev-‐master” }
<Laravel4> “require”: { "laravel-‐plus/extension": “~1.0” }
※laravel-‐plus/extensionを組み込み済みのプロジェクトスケルトンは以下で生成可能
composer create-‐project laravel-‐plus/laravel5=dev-‐master <project-‐name>
1/12
Spiffy Authen0ca0on
• 標準で AuthController.php PasswordController が追加された! →認証関連でパッケージに頼ることが無くなる? →Controllerは用意されているが紐づくViewは用意されていない・・・
2/12
Contracts & Method Injec0on
・Contracts = インターフェースクラスたち ・アプリケーションコンテナ内にある全てのオブジェクトにインターフェースが追加された。
Illuminate/Contracts名前空間 ファサードよりインジェクション(コンストラクタ・メソッド)推奨!?
3/12
Form Requests
• 今までのValida0onはroutes.phpかControllerに書くなどで対応。
→Requestを作成し、使用したいメソッドに対してインジェクションを行う形に変更された!
4/12
Mul0ple Filesystem
・ファイルの保存先にWebストレージを選択できるようになる。 ローカル ($root/storage/appフォルダ) AWS S3 Rackspace
・Flysystem (by PHP League)をベースとしている。 ※DropboxはFlysystemでもオプション扱いなので、Laravel5でサポートな
し?
5/12
Mul0ple Filesystem
・設定 config/filesystems.php
・オブジェクトの取得
app(‘filesystem.disk’) -‐ configの’filesystems.default’で指定 app(‘filesystem.cloud’) -‐ configの’filesystem.cloud’で指定
・インジェクション
Illuminate\Contracts\Filesystem\Filesystem = app(‘filesystem.disk’) Illuminate\Contracts\Filesystem\Cloud = app(‘filesystem.cloud’)
・ファサード
みつからない。
5/12
Socialite (BETA) ・SNS認証を行う追加パッケージ
2014/11/19時点でβ版
・対応サービス
Facebook Github Google Twi`er
・インストール
composer.jsonに以下を追加。
"laravel/socialite”: “2.0@dev”
6/12
Elixer Laravel5に統合されたWebアセット管理機能(gulpベース)
node/npm/gulpのインストールが必要 Homestead(2.0?)にはインストール済みのようだ
・機能
アセットのコンパイル Less / Sass / CoffeeScript アセットの連結 CSS / JavaScript アセットファイルのコピー アセットファイルのバージョン管理(Hash) Route / Eventのスキャン ユニットテストの起動 PHPUnit / PHPSpec
・拡張nodeモジュール
Stylus / Codecep0on / Browserify / Jade / Bower
5/12
New Environment Detec0on
[Laravel4] bootstrap/start.php に記述 ホスト名か環境変数で判定。
$env = $app->detectEnvironment([
'local' => [‘*'],
]);
[Laravel5] .envに環境変数として指定する。
.envは.gi0gnoreに登録されている。
APP_ENV=local
DB_USERNAME=dbuserDB_PASSWORD=dbpass
マシン名や任意の環境変数名で指定することはできなくなった??
8/12
Annota0on
• Laravel5ではAnnota0onによる処理を扱えるように!
• Routeに使う場合 • Eventに使う場合
• doctrine/annota0onsを使ってる!
9/12
New File Generator
Laravel4で既にあったコマンド • php ar0san make:console → php ar0san command:make • php ar0san make:controller → php ar0san controller:make • php ar0san make:migra0on → php ar0san migra0on:make
12/12
Laravel5のリリースは・・・
Symfony2.6リリース後? 2015年1月?
既存のLaravel4アプリの移行は時期尚早か・・・ 新規アプリをプロトタイプ的に作るなら
トライする価値あり!
Laravel Tokyoメンバー募集 [email protected] まで連絡ください。
[活動内容] 勉強会・イベント開催
Laravel TokyoのWebサイト開発 (デザイン・プログラミング)
書籍執筆 OctoberCMS研究、など
[活動場所]
都内コワーキングスペース(月2回予定)