zz log

zaininnari Blog

CakePHP 2.3.9 変更点

公式アナウンス

主な変更点

ドキュメント・テストケース・小さな修正は除きます。

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_ROOTTMP が自由に設定できるようになった。

今までは、決まったパスしか利用できなかった。