Yii Framework 2.0遅れてきた5番目のフレームワーク
たなかひさてる @tanakahisateru
Pinoco developerPHPTAL contributorFirebug translation contributorYii framework userPhpStorm user
フルスタックエンジニア(笑)
弊社開発中このサービスで使っているのが…
2.0 beta
ご存知ですか?海外ではSymfonyやCakePHPに並ぶポピュラーなフレームワーク!2.0 beta をそろそろ使い始めてもいいと公式に発表されている
Yii 1.1
• PHP 5.1.2 以上専用
• RHEL-5.10 と CentOS-5 のデフォルト = PHP 5.1.6
• 名前空間がなく、クラス名にCApplicationといったプレフィックスがあった
• CakePHP同様、Arrayを多用する面倒があった
• 遅延静的束縛がなかったため、ActiveRecordのインスタンスに find/save 系メソッドが存在した
Yii 2.0 beta
• PHP 5.4 以上
• ショートArrayシンタックスでスッキリ
• 名前空間の採用でクラス名がシンプルに
• 静的メソッドがオーバーライドできるようになって、 ActiveRecord::find()->… が可能に
• 1.1のイライラが全て解消されました
一言でいえば
RAD (Rapid Application Development) の最右翼
RADの最右翼ってどういうこと?
• ブラウザ内で動くコード生成ツール
• 十分なデバッグツールが初期インストール済み
• きわめてIDE (とくにPhpStorm) フレンドリー
• フレームワークに jQuery を統合済み
• デフォルトのウィジェットが Twitter Bootstrap 3 ベース
プロジェクト構成Rails系, PSR-4ベースPHPでいえばCakePHPに近い!ただしこれは名前空間で自由に構成可能 ↓規模の大きい開発にも十分
PHP5.4 ビルトインサーバーで試せる
いきなりここからスタート
DBからコード生成
既存ファイルがあればdiff
ソート・フィルター可能生成だけでここまでできる
Easy?
• FuelPHP / Latavel よりずっと枠組みが強い
• スクラッチで書き起こす作業は少なく、新しいことをやる場合もやり方が決まっている
• PHP on Rails 感
• ※テーブル名に複数形とか単数形とか日本人向きじゃないルールはありません
Hard?
• PHPオブジェクト指向に対して非常に誠実な設計
• コンフィグが階層的な DI コンテナ定義のよう
• コンポーネントの抽象化が適切
• フレームワークのどの部分でも独自実装に置換可能
• ただし、Symfony ほどの多クラス主義ではない
Pragmatic !
• デザインパターンや規約よりも、動くシンプルなコードを優先。余計なものは入れない主義
• MongoDB の ActiveRecord や OAuth プロバイダ対応などの拡張が、フレームワークコアと並行して開発されている
• はじめから SwiftMailer を採用
• 全部入りですぐに実用ツールが作れる
国内の ユーザーコミュニティ• Qiita にて 1.1 ベースでアドベントカレンダー2012完走
• 本家への貢献者は案外関西に多め
• 某大手サービスや関西の新進気鋭ベンチャーで1.1が採用されているらしい
• 関西PHPユーザー会で普及のきざし
• そして日本ユーザー会サイトYiiJan.org
YiiJan.org Error 503 orz
2.0 での ActiveRecord
• Eloquent ORM に似た ActiveRecord に変更された
• 結果セットはプレーンな ActiveRecord[ ] 型
• IDEフレンドリー
• いちどに結果を得る以外に…
• ページング等は別途DataProviderクラスを使用
• バッチ処理でメモリ消費が高い場合には ->each()
public function actionDailyBackup() { $today = new \DateTime(); $today->setTime(0, 0); ! /** @var Post[] $models */ $models = Post::find()->where("updated_at > :today", [ ':today' => $today->getTimestamp() ])->orderBy('id')->all(); ! foreach($models as $model) { \Yii::info("Storing " . $model->title); $this->sendToStorage($model); } }
引き継がれている長所• コンポーネント、イベント、ビヘイビア等の一貫性
• コンフィグ Array はオブジェクトのプロパティに対応
• ビューのウィジェット設定もオブジェクトのプロパティにぴったり対応
Application
config/*.php
config/*.php
ほとんどの場合、実装クラスの doc コメントがあればマニュアル不要 !
PhpStorm の F1 キー / Option + Space が便利
引き継がれている長所
• CSS / JS アセット管理をフレームワーク統合
• HTMLのGUIウィジェットを使うだけで、必要な CSS/JS が公開/リンクされる
class ActiveFormAsset extends AssetBundle { public $sourcePath = '@yii/assets'; public $js = [ 'yii.activeForm.js', ]; public $depends = [ 'yii\web\YiiAsset', ]; }
<?php $form = ActiveForm::begin(); ?> <?= $form->field($model, 'title')->textInput(['maxlength' => 255]) ?> <!-- 以下略 -->
<script src="/assets/2e597f3c/jquery.js"></script> <script src="/assets/26cbb072/yii.js"></script> !<script src="/assets/26cbb072/yii.validation.js"></script> <script src=“/assets/26cbb072/yii.activeForm.js"></script> !<script src=“/assets/a8c5b3b0/js/bootstrap.js"></script> !<script type="text/javascript">jQuery(document).ready(function () { jQuery('#w0').yiiActiveForm(...); }); </script> !</body> </html>
ビューで何かウィジェットを使うだけで
依存関係を追って、HTML に 必要な JS/CSS が勝手に挿入される
フロントエンドまで含んでフレームワーク まさにフルスタック
ありがとうございました
Top Related