2.1 移行ガイド
CakePHP 2.1 は、2.0 の API の完全上位互換です。
このページでは、2.1 の変更と改善についてのアウトラインを紹介します。
AppController, AppHelper, AppModel および AppShell
これらのクラスは App ディレクトリの一部として必要になりました。CakePHP
のコアからは削除されています。もし、これらのクラスを利用していなかった
場合は、次のような方法でアップグレードすることができます。:
// app/View/Helper/AppHelper.php
App::uses('Helper', 'View');
class AppHelper extends Helper {
}
// app/Model/AppModel.php
App::uses('Model', 'Model');
class AppModel extends Model {
}
// app/Controller/AppController.php
App::uses('Controller', 'Controller');
class AppController extends Controller {
}
// app/Console/Command/AppShell.php
App::uses('Shell', 'Console');
class AppShell extends Shell {
}
もし、あなたのアプリケーションが既にこれらのファイルやクラスを利用して
いた場合には、特に何もする必要はありません。
その他、コアの PagesController を利用していた場合には、このファイルを
app/Controller ディレクトリへコピーする必要があります。
.htaccess ファイル
デフォルトの .htaccess ファイルが変わっていますので、このファイルを
アップデートするか、Web サーバの URL 書き換え機能を .htaccess の変
更に合わせてアップデートことを忘れないようにしてください。
モデル
- beforeDelete コールバックは、ビヘイビアの beforeDelete コールバッ
クより前に実行されます。これはモデルレイヤでの他のイベントとの動きと
一貫したものになります。
- Model::find('threaded') では、 parent_id 以外のフィールドを使
えるように $options['parent'] が利用可能になりました。もちろん、
モデルが TreeBehavior をアタッチし、他の親フィールドを利用している場
合には、threaded 検索はデフォルトでそのフィールドを利用します。
- プリペアード・ステートメントで利用するクエリのパラメータは SQL ダンプ
の一部となりました。
- バリデーション配列は、フィールドの必要性をより明確に指定できるようになりました。
required キーは create と update の値を持つことができます。
これらの値は、作成時と更新時のそれぞれでフィールドの値の必要性を定義できます。
- モデルには schemaName プロパティが加わりました。もし、あなたの
アプリケーションが Model::$useDbConfig を修正して、データソース
を切り替えた場合、 schemaName も修正することができます。もしくは、
Model::setDataSource() メソッドを使っても変更可能です。
CakeSession
バージョン 2.1.1 で変更: CakeSession は P3P ヘッダをセットしなくなりました。このことは、あな
たのアプリケーションの動作に変化でる場合があります。
更に詳しい情報は lighthouse にある次のチケットを参照してください。
#2515
ビヘイビア
TranslateBehavior
- I18nModel は、複数のファイルに分割されました。
例外(Exceptions)
デフォルトの例外(Exception)は、スタック中の全ての関数の引数のダンプと
ファイルの抜粋を含んだスタックトレースを出力するようになりました。
ユーティリティ
debug()
debug() は内部で Debugger クラスを利用するようになりました。
これはデバッガとしての辻褄があいますし、よりよいものにするためのアドバンテージをもたらします。
Cache
- CacheEngine は複数のファイルに分割されました。
App
- App::build() は App::REGISTER を利用して新しいパッケージを追加することができるようになりました。 より詳しい情報は app-build-register を参照してください。
- 設定されたパスの中で見つからないクラスは APP を代替パスとして検索します。
これは app/Vendor 内でディレクトリがネストしている場合などにオートロードを簡易にします。
コンソール
Test Shell
新しい TestShell が追加されました。ユニットテストを実行するために必要な
タイプ数を軽減したり、ファイルパスベースの UI を提供します。
./Console/cake test app Model/Post
./Console/cake test app Controller/PostsController
./Console/cake test Plugin View/Helper/MyHelper
古いテストスイートのシェルとその記法もまだ存在しています。
General
- 作成されたファイルは、作成された日時のタイムスタンプをもう含んでいません。
ルーティング
Router
- Route 機能は特別な /** の書き方が利用できるようになりました。全て
の引数を単一の引数のように扱えます。詳しくは
connecting-routes セクションを確認してください。
- Router::resourceMap() が追加されました。
- Router::defaultRouteClass() が追加されました。このメソッ
ドは、これより先に接続する全てのデフォルトの route クラスを設定できます。
ネットワーク
CakeRequest
- requestAction を判定するための is('requested') と isRequested() が追加されました。
コンポーネント
AuthComponent
- AuthComponent::allow() では、全てのアクションを許可する
allow('*') のようなワイルドカードは使わなくなりました。
代わりに allow() を使ってください。
これは allow() と deny() とで共通した API となります。
- 全ての認証用アダプタに recursive オプションが追加されました。セッ
ションに格納されたアソシエーションをより用意にコントロールすることが
できるようになりました。
AclComponent
- AclComponent は、 Acl.classname で使う場合に小文字お
よび複数形ではなくなりました。
- Acl バックエンドの実装は Controller/Component/Acl へ置かれるよう
になりました。
- Acl の実装は Component ディレクトリから Component/Acl ディレクトリへ
移動されました。例えば、
Controller/Component/CustomAclComponent.php に保存していた
CustomAclComponent という名前の独自 Acl クラスを使っていたとしま
す。これは Controller/Component/Acl/CustomAcl.php へ移動します。
また、名称を CustomAcl へ変更します。
- DbAcl は、単独のファイルに分割されました。
- IniAcl は、単独のファイルに分割されました。
- AclInterface は、単独のファイルに分割されました。
ヘルパー
TextHelper
- TextHelper::autoLink() と
TextHelper::autoLinkUrls() 、
TextHelper::autoLinkEmails() は、デフォルトで HTML のエス
ケープを行なうようになりました。
escape オプションにより、動作をコントロールできます。
ビュー
View::$output は推奨されません。
$content_for_layout は推奨されません。
代わりに $this->fetch('content'); を利用してください。
$scripts_for_layout は推奨されません。代わりに下記の記述を利用してください。
echo $this->fetch('meta');
echo $this->fetch('css');
echo $this->fetch('script');
$scripts_for_layout は、まだ存在しています。
しかし、 view blocks API 方が拡張性や柔軟性をもたらします。
Plugin.view シンタックスがどこでも使えるようになりました。ビュー
やレイアウト、エレメントの名前を参照したい際に、どこでもこのシンタッ
クスを利用できます。
element() の $options['plugin'] オプションは推奨されません。
代わりに Plugin.element_name を利用してください。
Content type views
CakePHP に2つのビュークラスが追加されました。新しい
JsonView と XmlView は、XML と JSON ビューの
作成を用意にしてくれます。これらのクラスについては、
JSONとXMLビュー セクションで詳しく学べます。
Extending views
View クラスには、ビューやエレメント、レイアウトを別のファイ
ルでラップしたり拡張したりするための新しいメソッドが加わりました。
この機能の更に詳しい内容は ビューの継承 セクションを参照してください。
Themes
View クラスの代わりの ThemeView クラスは推奨されません。シンプ
ルに $this->theme = 'MyTheme' のようにセットすることで、テーマのサ
ポートができます。また、 ThemeView を継承した全てのカスタムビューク
ラスは View を継承するようにしてください。
View blocks
ビューブロックは、ビューのパーツやブロックの作成に柔軟性をもたらします。
ブロックは $scripts_for_layout の強力かつ柔軟な代替 API です。
より詳しいことは ビューブロックを使う を参照してください。
ヘルパー
CacheHelper
- エレメントの中に記述された <!--nocache--> タグが正しく動作するようになりました。
PaginatorHelper
- PaginatorHelper::numbers() に currentClass オプションが追加されました。
テスト
- Web テストランナーは、PHPUnit のバージョン番号を表示するようになりました。
- Web テストランナーは、app テストをデフォルトで表示するようになりました。
- フィクスチャが $test ではない別のデータソースに作成することができるようになりました。
- ClassRegistry によって読み込まれたモデルや他のデータソースから読み込
まれたモデルは、 test_ の接頭辞が付いたデータソース名を取得します。
(例えば master というデータソースであれば、テスト内では
test_master を利用しようとします)
- テストケースは setup メソッドを含んだクラスとして生成されます。
イベント
- 新しい一般的なイベントシステムが作成され、コールバックによる方法は推奨されなくなりました。
これはあなたのコードの変更を要求するものではありません。
- あなた自身のイベントをディスパッチすることができ、自由自在にコールバックに付加することができます。
これによりプラグイン間の通信に有効だったり、クラスの分離を容易にしたりします。