この記事はhttp://fuelphp.com/blogs/2013/08/2-0-an-updateを元に作成しています。
フォルダ構成の見直し
古い ‘frontend’ (fuel/fuel) を、新しい ‘frontend’ (fuelphp/fuelphp) と ‘application’ (fuelphp/demo-application) composer ライブラリとに分離する。アプリケーションに影響を与えずに、Composer アップデートが可能になる。
view を Presenter とリネームする。ルーティングエンジンがコントローラ、タスク、マイグレーションを扱う。タスクとマイグレーションは特別なものではなくなり、コントローラと同じように作成できる。
アプリケーションフォルダに cache, logs, tmp が増える。これらを var フォルダに纏めるかも、という議論があり、確定ではない。
Composer を使用してアプリケーションをインストールする場合、Composer インストーラが用意されていて適切なフォルダにインストールされる。
Composer/Packagist, PSR-0, PSR-1 を採用する
FuelPHP2.0 では、Composer ですべてインストール可能になる。フレームワーク自体もいくつかの package に分割され、Composer でインストールできるようになる。ほとんどの package はフレームワークとは独立して利用できる。Composer を用いることで、他の Composer ライブラリを取り込みやすくなる。
FuelPHP は PSR-0 を採用する。PSR-1 も採用することを決めた。スネークケース(snake_case) からキャメルケース(camelCase) へ変更する。PSR-2 は採用しない。
用語
新しい概念「Application」。単一のインストールが複数の application を持つことができ、それぞれがフロントローダを持つ事ができる。たとえば、同じ FuelPHP のインストールで、フロントエンドアプリケーションと、RESTful API によるバックエンドアプリケーションを持つ事ができる。application は完全に独立しており、データやコードに直接アクセスすることはない。Oil は FuelPHP1.x ではコマンドラインツールだが、独立した application として書き直される。
application の設定は独立である。あるアプリケーションを「開発(development)」、別のアプリケーションを「本番(production)」とすることができる。
application は、module を持つことができる。module は「ベースとなる名前空間を持つ」「ベースとなる URI セグメントを持つ」「どこへでもインストールできる」「ルーティング可/不可が指定できる」「モジュールの bootstrap を持つ」
Package は Composer ライブラリに置き換えられる。
ファサードクラス
スタティックメソッドを直接呼び出す他、ファサードクラスのインスタンスを介して実行することもできる。
コンテクスト
コアクラスをコンテクストにより階層化する。Global, Applicaion, Request
言語
完全な多言語対応。Application は、それぞれ、言語コンテナを持つ。
設定
Global コンテクストでは、サーバー、PHP、フレームワークに関する設定。Application コンテクストでアプリケーション毎の設定。
入力
Global コンテクストと Request コンテクストで有効。
コンテクスト継承
未指定なら上の階層の設定を取得する。
ファサードとコンテクスト
ファサードクラスを使用する場合、呼び出したコンテクストを検出して、適切なオブジェクトを使用する。
依存性注入、エクステンション、制御の反転
依存性コンテナを採用する。外部依存を実行時に注入する。
ViewModel が Presenter に
名前の変更。オプションなのは ViewModel と同様 (FuelPHP 自体は MVC)。
クエリビルダ
プラットフォームに依存しないクエリビルダ。MySQL, PostgreSQL, MSSQL, SQLite 等に対応する。
ORM
オブジェクト指向を強化。1.x の find() のような複雑な配列は止める。
マイグレーション
特別なクラスではなくなる。普通のクラスのようになる。
Oil はアプリケーションに、Tasks は特別なコントローラに
Oil はアプリケーションになる。将来的にはウェブインタフェースを提供するかもしれない。
Tasks は Tasks という名前空間を持つコントローラになる。
ドキュメント
ドキュメントシステムを一新する。Markdown で記述できるようにする。API/Class よりも、使い方の説明を重視する。API の情報は、PHPDocumentor で生成するページ。
レガシーサポート
1.x との後方互換性をなるべく保つ。IDE 等で検索/置換が必要になるだろう。
マイグレーション等は書き換えが必要になる。
クラスプロパティへ直接アクセスできなくなる。ゲッター/セッターを使用する必要がある。
意見/感想/要望など
元記事 http://fuelphp.com/blogs/2013/08/2-0-an-update のコメント欄、IRC (#fuelphp) 等で受け付けています。
[…] 、FuelPHP 2.0 はこうなるを書いたこともあって、私が最初に FuelPHP2.0 の計画について話しました。 […]