CakePHP 2.3.9 変更点
公式アナウンス
- CakePHP 2.3.9 released
今回のリリースは
メンテナンスリリース
です。 20のバグフィックス及びパフォーマンスの改善が行われています。
主な変更点
ドキュメント・テストケース・小さな修正は除きます。
CakeResponse
_fileRange
Content-Range ヘッダーが正しい範囲を返すよう修正
Range: bytes=0- Range: bytes=-500
のような HTTP_RANGE の開始値や最終値がない場合、計算結果が正しくなかった。
Bake
Bake Controller で作成されるページネートが Paginator コンポーネントに変更
以前は古い形式 $this->paginate()
だったが、$this->Paginator->paginate()
に新しくなった。
FormHelper
_introspectModel
動的なルールの追加に対応
$object->validate のチェックが削除された。バリデート関連のメソッドはModelクラスから、ModelValidator へ委譲されている。
AuthComponent
redirectUrl
App.baseUrl を指定しているとき、それが含まれてしまうデグレードを修正
CakePHP2.3.7 のデグレードを解消したCakePHP2.3.8 から発生。
I18n
translate
$domain が空文字の場合、例外が発生するように変更
ちなみに初期値の null の場合はデフォルト $domain が使用される
FileEngine
clear
グループを設定している場合、Cache::clear
でファイルが削除されなかったのを修正
clear
使用されていない設定のファイルパスが存在しない場合、エラーが発生するのを解消
clear
上記の修正で、Windows 環境にて、デグレートが発生するのを再修正
この問題はWindows環境でよくある問題(Rubyでも発生する)で、ファイルリソースを開いたまま、リネームや削除ができないというもの。一旦、ファイルリソースを閉じてからならば、リネームや削除が可能になる。
ComponentCollection
setController
が追加された
ControllerTestCase::generate を使用時、setController
により コントローラーモックオブジェクトを挟み込むことで、ComponentCollection::$_Controller に依存するコンポーネントがTrying to get property of non-object
エラーを発するケースを解消するようになった。
CakeRoute
persistParams
用のオプション設定が必須ではなくなった
以前は、CakeRoute::$options['persist'] をキーのチェックや型のチェックをなしに、foreach で回していたが、事前に、キーのチェックや型のチェックを行うようになった。CakeRoute::$options['persist'] はデフォルト値もなく、サブクラスやインスタンスで定義される保証がなかった。
Model
save
fieldList や whitelist の配列の指定の解釈が正しくなかったのを修正。
呼び出す元のモデル(自モデル)の指定の場合、自モデルのエイリアスを省略でき、そうでない場合、モデルのエイリアスをキーとした配列を記述しなければならない。今回の場合、自モデルの指定がなく、他モデルの指定だけがある場合、自モデルの指定として解釈する場合があったのを解消した。
Configure
bootstrap
App::$bootstrapping = false;
が App::init
の後に移動し、パフォーマンスが向上するようになった
App::$bootstrapping
は bootstrap 処理中かどうかを表す boolean。初期値は、false だが、Cake/bootstrap.php が読み込まれると、true になる。その後、今回の変更のある Configure::bootstrap が呼ばれる。
false 時にマッピングされていないファイルを読み込むと、App::$cacheChange が true になる。スクリプト処理が完了した際、App::init で register_shutdown_function により登録された App::shutdown が呼び出され、App::$cacheChange が true と評価されると、Cache::write('file_map', array_filter(self::$_map), '_cake_core_');
でキャッシュの書き込みが行われる。
今回のチケットの問題は、手元の環境では再現できなかったが、App::init 中に読み込まれるファイルが、別のファイルを読み込む場合に、再キャッシュを防ぐという目的で今回の変更が行われた模様。
travis
mysql の時だけ AllTests を実行し、それ以外の場合は、データベースが関係する AllDatabase を実行することでテスト時間を短縮
実行タイミングによるものの1分程度の短縮が見られる。
CookieComponent
_write
複数のキーを書き込む場合、期限が正しく設定されなかったのを修正
AclNode
node
JOIN を LEFT
から INNER
に変更し、パフォーマンスを改善
ShellDispatcher
_bootstrap WWW_ROOT
と TMP
が自由に設定できるようになった。
今までは、決まったパスしか利用できなかった。