zz log

zaininnari Blog

CakePHP 1.3.13 の変更点メモ

今回のCakePHP 1.3.13 リリースも、バグフィックス及びメンテナンスです。

但し、CakePHP1.3.12 で行われた修正が再度、修正されているものがあります。


個人的には、
Cake2で修正された theme 内の element のキャッシュが正しく読み込まれないバグのバックポートが欲しかったです。
http://cakephp.lighthouseapp.com/projects/42648/tickets/117-cakenocache-not-working-with-themes
(変更点は非常に少ないので、自前ですぐに修正できますが)

主な変更点

  • チケット】【コミット】Amazon SES 等のSMTPサービスで、ファイル添付の際に付加されるヘッダーで拒否される問題を修正&メールアドレスのエイリアスの空白をトリムするよう変更
    • 前半の変更についてはよく分からない。
  • チケット】【コミット】 Inflector::rules() で追加されたルールが、コアで定義されたものより優先されるよう変更
  • チケット】【コミット】Validation::time にて、「'1 pm'」や「'1 PM'」など、間のスペースを受け入れるよう変更
  • チケット】【コミット】 Model.field.1 記法で、3次元以上の深さをフォームヘルパーで使用すると、フォーム改竄対策のトークンが正しく生成されなくなり、 SecurityComponent::_validatePost()が偽になる問題を修正
    • 個人的に嬉しい修正。3次元以上をするときは、今まで、SecurityComponent::disabledFields で回避していた。
  • コミット】アソシエーションを含み、idが設定されていないデータを保存しようとした場合、 model::savaAll() の挙動を改善
  • コミット】TranslateBehavior のクエリー最適化
    • TranslateBehavior は使ったことがないのでよく分からない。
  • チケット】【コミット】dbo_mysqli virtualField を持つレコードセットの配列化が正しく処理できなかったのを修正
  • チケット】【コミット】EmailComponent  Message-ID header の処理を 1.3.11 以前へ巻き戻し
    • 4e7c46e2-8a10-4066-a55e-33749b79b63c@example.com という素の String::uuid() では、SpamAssassin の RATWR8_MESSID というルール(ratware[スパム業者が利用している大量の電子メールを送信するためのソフトウェア]で生成されるMessage-IDの1パターン)に該当し、スパム判定の評価が高くなりやすかった
      • ここは自信ない。ratware判定のフィルタ多すぎて、1.3.12 で修正したと思ったらやっぱり違っていた?
  • コミット】Helper 内の Set::extract() の引数の順序を更新
    • Set::extract() の冒頭で、文字列と配列の型をチェックして、順序が逆でも動作する。
    • APIが本来想定している順序に合わせた模様
  • チケット】【コミット】model::find() に join のキーが含まれる場合、プリフィックスを含めたテーブル名になるよう変更
    • 手動で join する際に、自前で、$db->fullTableName() を読んで、プリフィックスを含めたテーブル名を指定しなければならなかったが、フレームワーク側で面倒を見てくれるようになった
    • アソシエーションを定義しておけば、内部で、$db->fullTableName() は呼ばれていたが、手動で join する場合は考慮されていなかった
  • コミット】FormHelper::error() のテキスト表示部分の判定が 「!== null」と厳格になった
    • エラー表示をなし(タグはあるが、中身が空)を意図した「$this->Form->input('Contact.password', array('error' => ''));」を表示できるようになった
  • チケット】【コミット】error handler を自前のものを用意し、DISABLE_DEFAULT_ERROR_HANDLING を定義したにも関わらず、Debugger が呼ばれてしまう。
    • この機能はCakePHP2系では削除されている
  • チケット】【コミット】Controller::paginate() の際、他のモデルの virtualFields と目的のフィールド名が同一の場合、意図しない挙動を起こすのを修正
    • virtualFields をチェックする場合は、目的のモデルかどうかを判別するコードが追加された。
  • チケット】【コミット】Change how floats are formatted in MySQL.
    • decimal型での正確さが失われる問題
    • CakePHPでは、decimal型がない(float型として扱う)ため。
    • コードを見るに、float型だったら文字列化してDB にお任せか
    • プログラムで小数点を扱う計算は、ハマるが多いので個人的には避けてる
  • チケット】【コミット】Removing uses of db->fullTableName() when creating joins.
    • 少し上の $db->fullTableName() の問題を behaviors/translate に適応
  • チケット】【コミット】Set::format が配列の値が null の時をサポート
    • isset($data[$i][$j]) はキーをチェックして、さらにその値も評価
    • array_key_exists($j, $data[$i]) はキーをチェックするだけで、値にはノーチェック
  • チケット】【コミット】View::ext を変更した際、読み込むエレメントの優先処理が正しくなかった
    • 例えば、拡張子を .xml に変更すると、 内部では、変更された「.xml」にデフォルトの拡張子「.ctp」を加えた $exts = arrary('.xml', '.ctp') の配列をループして探索しているが、element.xml というファイルが見つかった場合、そこでループを止めておらず、もし、element.ctp があった場合には、読み込まれるエレメントは、「element.ctp」のエレメントになってしまっていた。
  • チケット】【コミット】cache/file キャッシュファイル作成時、ファイルパーミッションを変更するようになった
    • cron 時に ファイルキャッシュ を読み込む場合 Permission denied エラーが発生していた