今回のCakePHP 2.0.1 リリースは、CakePHP2系初のバグフィックス及びメンテナンスリリースです。
修正は100個近いですが、ドキュメントの修正や coreとtestのコードが別コミットものも多数あり、 実態の数としては、少なく感じました。
特に大きい修正としては、以下がありました。
- CakeEmailクラスの日本語強化
- Routerクラスのurlencoded/urldecoded の追加
- habtm モデルのフォームを生成の改善
また、
CakePHP 2.0.1 リリースは、マルチバイトのContent-Length ヘッダー付加に致命的な問題(内容が途中で切り捨てられる)があり、
修正リリース CakePHP 2.0.2 がリリースされています。
- 変更差分(2.0.0 -> 2.0.1)
主な変更点
- ■PhpReader::read() で「php」の拡張子がついているものを優先してチェックするよう変更&ディレクトリを除外
- 前者は、チェックの順番の変更
- 後者は、file_exists -> is_file と関数を変更
- ■Router::url('://example.com') 相対プロトコル URL が正しく動作するよう('://example.com'が返る)変更
- ■TextHelper::highlight でハイライトする文言の置換で preg_quote が行われるようになった
- PCRE のデミリタや選択肢を含んだものをハイライトさせようとすると、エラーまたは意図しない挙動を示した。
- 1.2系がチケットが出され、1.3系・2.0系にも適応された。
- PCRE のデミリタや選択肢を含んだものをハイライトさせようとすると、エラーまたは意図しない挙動を示した。
- ■最新のZend Community Server で APC が正しく動作しないため、使用条件を強化
- 「apc_dec(保存した数値を減らす)」がないバグの模様
- ■FileEngine にて read のあと(リソースを閉じずに)に write を行うと、(キャッシュエンジンの仕様上)正しく書き込まれない
- read
- ハンドルのファイルポインタは終点へ
- (内容を取得する前には、rewind が呼ばれる)
- write
- ftruncate(0)
- ファイルポインタは変更されないので、現在地点(ファイルの始点から終点まで)を null で埋める
- fwrite($contents)
- ftruncate(0) でnullで埋めた直後から、内容を書き込む
- ファイルの中身は、一行目が「直前のファイル内容が全て null になったもの + 今回書き込んだunixtime」、2行目は、「今回書き込んだ内容」となる
- ftruncate(0)
- read
- 一行目を読み込んで、unixtimeを取得する
- この場合、unixtime の前には null があるため、intval の変換で 0 となり、0 < time() が常に真となり、false が返る
- 書き込んだ内容が取得できない
- 変更点は、ftruncate(0) をする前に、rewind() を呼びファイルポインタを最初に戻るようになった。
- intval で変換した変数を 「!== false」と比較しているが、intval の返り値が false となる場合はありうるのか?
- read
- ■CakeEmail クラスが生成するヘッダー 「Content-Transfer-Encoding」が 7bit -> 8bit へ変更
- UTF-8 をデフォルトとしている流れ
- 強制的なセット(ヘッダーの配列をチェックして云々はない)のため、iso-2022-jp で送りたい場合は、ソースに手を入れる必要がある
- ■CakeEmail クラスが生成するヘッダー 「Content-Transfer-Encoding」をセットする場合、文字エンコーディングを考慮するようになった
- ■CakeEmail クラスが生成するヘッダー 「Content-Transfer-Encoding」で文字エンコーディングを考慮するメソッドが private -> protected へ変更された
- ■CakeEmail メッセージのエンコーディングを行う場所の変更と日本語テストの追加
- ■UpgradeShell の利便性向上、アップグレードするフォルダの探索順序を改善
- ■FormHelper::submit の url へ Helper::assetTimestamp() が付加されるようになった
- ■CakeResponse Location ヘッダーを送った場合、body を送る前にスクリプトを終了させるよう変更
- ■CakeResponse RedirectRoute で↑を行った方が適切なため、コードを戻す
- ■RedirectRoute ↑↑に相当する処理を追加
- ■AuthComponent user() を使用する際、クッキー&セッションを使用しない認証(Basic認証)を考慮するように変更。
- クッキー&セッションを使用しない認証の場合、AuthComponent::$_user にユーザ情報を持たせることで対応。
- ■FormHelper habtm モデルのフォームを生成する際、1.3系と同様のセレクトタグを生成するように変更
- 2.0.0では、追加のコードになっていた。
- ■DboSource 不必要なコールバックが呼び出されていたのを修正
- ■Helper 0.Model.field の形式を正しく扱えるよう修正
- ■basics h() オブジェクトを渡された際の処理を追加
- Object::__toString がある場合は、そちらを呼び、そうでない場合は、オブジェクト名を返すようになった
- ■CakeResponse Content-Length ヘッダーを付加するようになった
- この修正には問題があります。
- ■FormHelper::_isRequiredField $validate を最小構成した際、 'required' 扱いされない
<?php // 最小構成の例 $validate = array( 'field' => 'notEmpty', );
- ■AuthComponent::deny deny('*')記法が廃止され、引数なしの呼び出しdeny()だけが、全ての拒否をできるようになった