CakePHPコアチームはCakePHP2.1.2と2.2.0ベータが入手可能になったことをお知らせいたします。2.1.2は2.1系のバグ修正のリリースで、2.2.0ベータは2.2系の初めてのリリースになります。
CakePHP 2.1.2
CakePHP 2.1.2 では幾つかのバグ修正があります。特筆すべき点は以下のとおりです:
- Set::insert() は前に設定した文字列の値を正しく上書きするようになった
- AuthComponentはセッションがカラの場合に loginRedirect をデフォルトのリダイレクト先として使用するようになった。
- CakeNumber::format() はPHP 5.4以下のPHPを使用している場合でもオプション値「thousands」「decimals」の値としてマルチバイトをサポートするようになった。
- CakeSessionに加えられた修正は、IE8とセッション消失問題の解決のために元に戻された。
- SQLServerのboolean値のカラムに関する問題を修正
- テーブルがサブクエリの場合に、DboSource::buildJoinStatement() がスキーマ名を追加しないように修正
- SessionComponent::id() がいつもsessionidを返すように修正。必要な場合にはセッションを自動で開始するようになった
- モデル内の expression() と calculate() のメソッドチェックは必要な場合だけ実行されるようになった。
- テストスイートはいつでも test データソースを使用するようになった。以前はフィクスチャがない場合やデータベースを必要とするテストを実行する場合に、デフォルトの接続が使用された。
- URLの断片は urlencode されなくなった。(かつては)backboneのようなクライアントサイドのフレームワークに問題を引き起こしていた。
- L10n::get() の戻り値は一貫して言語を返却するようになった。
- css() と script() のURL文字列のHTMLエスケープを修正
- hasMany を使用したデータセットがカラだった場合の saveAll() 時に警告が出ていた件を修正
- Validation::decimal() は 10 や 10.0 のような値を受け入れるようになった
- FormHelper::postButton() は非表示のボタンを生成しなくなった
- $_FILES 配列は再帰的に再フォーマットされるようになった。ファイル入力が多重にネストしている場合の問題を修正
- EmailComponent はUTF-8の文字がある場合に二重にエンコードすることはなくなった
- File::create() は umask のトリックを行わなくなった。ファイルキャッシュ時のワークアラウンドで、もはや必要なくなったため。
CakePHP 2.2.0-beta
2.1.0にすぐ続いて、CakePHPは2.2.0ベータのリリースをお知らせいたします。2.2系は2.0系や2.1系とAPI互換性があります。2.1.2のリリース時の変更点はすべて2.2.0ベータにも取り込まれています。通常の -dev
や -alpha
を飛ばすことにし、新機能は安定的に、またアップグレード時の見通しをよくしておくように考慮しています。以下は2.2.0ベータに追加された変更点の概要の一覧です。
CakeTimeユーティリティのTimezoneサポート
- アプリケーション全般のタイムゾーン設定としてパラメータ Config.timezone を追加
- CakeTime 関数は DateTimeZone オブジェクトの timezone 文字列を使用する
- $userOffset パラメータはすべての関連する関数で $timezone パラメータに置き換えられた
- $timezone パラメータに数値を渡す方法も後方互換性のために使用可能になっている
- 新しいメソッド CakeTime::toServer()、CakeTime::timezone() が追加
複雑なカスタム検索のためのページネーションをサポート
モデルの findCount()
はさらなる柔軟性のために $query['operation'] = 'count'
と指定するようになりました。
ほとんどの場合、カスタム検索ページネーション時に正しいカウント値を返しますが、operationキーによって他のクエリを構築したり、カスタム検索のために関連を解消したりするのにさらに柔軟性が高くなります。カスタム検索メソッドによるページネーションでは十分にうまく動作しないことがあり、モデルレベルでさらなる作業が必要になりましたが、これからはもう必要ありません。
ACLメソッドはパーミッションモデルに
パーミッションモデルは、モデル層からのパーミッションチェックを簡便にするために AclComponent 内のすべてのメソッドから使用できます。
新しいハッシュクラス
新しいユーティリティライブラリ Hash
が追加されました。パフォーマンスの改善とAPIの一貫性のために Set
クラスを置き換える予定です。すべての Set
の内部呼び出しは置き換えられ、非推奨となり、以後のメジャーバージョンで削除される予定です。
ドット区切りのキーをネストした配列に変換するための Set::expand()
に対応する Hash::expand()
が追加されました。
ヘルパーの遅延ローディング
アプリケーションフォルダに配置されているヘルパーは遅延ロードされるようになり、コントローラ内の $helpers
プロパティで宣言する必要がなくなり、コールバックトリガーに依存しないようになりました。
Redisキャッシュエンジン
Memcacheとよく似た、新しいRedisサーバに対応したキャッシュエンジンが追加されました。
キャッシュグループ
グループ内のキャッシュキーにタグやラベルを付けられるようになりました。これにより同じラベルのキャッシュエントリを一括削除するというようなことが簡単に行えます。キャッシュエンジンの作成のときに、グループは構成時に宣言されます。
致命的なエラーとコンソールエラーのハンドラ
コンソールと致命的なエラーのエラーハンドラを個別に設定できるようになりました。設定しない場合は、デフォルトが使用されます。カスタムエラーハンドラを使用する場合は、他のタイプに加えて致命的なエラーのコードを受け取ります。
多重トランザクションのサポート
DBOデータソースは多重のトランザクションをサポートするようになりました。アプリケーションでこの機能を使用する場合は、以下のようにします。
ConnectionManager::getDataSource('default')->useNestedTransactions = true;
ディスパッチャのフィルタ
イベントリスナーはディスパッチャの呼び出しを割り当てられるようになり、リクエスト情報や、クライアントへレスポンスを返す前の情報を変更できるようになりました。ディスパッチャフィルタに関する設定は app/Config/bootstrap.php
で行います。アプリケーション内で、割り当てられたテーマやプラグインに依存するアセットがあるか、フルページキャッシュを使用している場合、必ず関係する設定をブートストラップファイルにコピーしてください。以下のようにします。
さらに、新しいAssetDispatcherフィルタはブラウザが既にキャッシュ済みのアセットを検知した場合、304コードを返します。
その他の変更
- CakeEmail クラスに charset() / headerCharset() クラスの追加
- Travis CI のサポート
- FormHelper でバリデーションキー「on」のサポートを追加。これによりオペレーションのタイプごとに、必要なクラスをセットするようになった。
2.2.0ベータに続いて、コアチームは2.2系の最終リリースへ向けて注力し、CakePHPの次期リリースに向けた作業を開始します。
いつもながら、パッチやチケットやドキュメントの編集など、このフレームワークに貢献してくれるすべての皆さんに深謝します。あなたがいなければCakePHPは存在しません。