zz log

zaininnari Blog

CakePHP 2.0.3 の変更点メモ

今回のCakePHP 2.0.3 リリースは、CakePHP 2系の安定性の向上、PHPUnit 3.6・PHP5.4 に対応への対応がメインです。

66のコミットと32の問題解決と中規模の改善がありました。

大きくは、
PEAR でインストールされるデフォルトのバージョンが PHPUnit 3.6 になったことで、
PHPUnit が動作しなくなる問題を解決しています。
また、
PHP 5.4 RC1 がリリースされ、それを見越した変更を加えられています。

その他の改善として、

がありました。

主な変更点

  • DboSource SELECT 文以外のクエリの後は $this->_result が PDOStatement のインスタンスでなかった。これにより、DboSource::lastAffected が正しい整数を返すようになった。
    • DboSource::_execute で PDOStatement::columnCount(結果セット中のカラム数を返す) に加え、PDOStatement::rowCount(直近の SQL ステートメントによって作用した行数を返す)もチェックするようになった。
    • $this->_result は、DboSource::_execute の返り値が格納される。返り値は、boolean, PDOStatement オブジェクト のいずれか。
      • PDOStatement::execute に失敗すれば、false
      • PDOStatement::execute に成功して、PDOStatement::columnCount が 0 かつ、PDOStatement::rowCount が 0 ならば true
      • 上記に当てはまらなければ、PDOStatement オブジェクト
    • DboSource::lastAffected は、$this->_result が PDOStatement のインスタンスかどうかをチェックして、PDOStatement::rowCount を返す
  • Controller Controller::setAction をコールした際、$this->view が正常に更新されるようになった
  • CakeResponse Content-Length 計算方法の修正。CakeResponse::send コール前のバッファも計算に含めるようになった。
  • PHPUnit3.6 への対応
    • PHPUnit3.6 が pear インストールのデフォルトになった & PHPUnit3.5 から API の変更があり、2.0.2以前では、動作しなくなっていた。今回の変更で、PHPUnit3.6 でもテストが可能になった。
  • Model::_deleteDependent $cascade === false 時の不要なループをしなくなり、処理が向上
    • $this->hasMany と $this->hasOne の合計数ループをして、そのなかで、$cascade === true ときだけ、処理が実行されており、$cascade === false 時には、ループが完全に無駄になっていた
    • 1.3系でも同様
  • CakeResponse::outputCompressed HTTP_ACCEPT_ENCODING に gzip が含まれていない場合、Content-Length をCakePHPがセットするようになった。
    • HTTP_ACCEPT_ENCODING に gzip が含まれていない場合、Content-Length を CakePHP がセットせず、Content-Length をセットする流れに反していた。
    • ヘッダーにCakePHPが Content-Length をセットするのは、$shouldSetLength && !$this->outputCompressed() が true の時
      • $shouldSetLength : 既に Content-Length されていない、かつ、ステータスコードが 301〜307 でない
      • $this->outputCompressed() : ini_get("zlib.output_compression") === '1' || in_array('ob_gzhandler', ob_list_handlers())
        • 修正前はサーバ側の都合だけで決まっていた
        • 修正後は strpos(env('HTTP_ACCEPT_ENCODING'), 'gzip') !== false と条件を加え、チェックするようになった
    • HTTP_ACCEPT_ENCODING に gzip が含まれていない場合、$this->outputCompressed() は false を返し、$shouldSetLength && !$this->outputCompressed() 全体が true になり、ヘッダーに Content-Length をセットするようになった。
  • Router::_handleNoRoute 不要な変数の削除
  • CakeSession::_defaultConfig php.ini の設定を使用する時、 'session.save_handler' => 'files' に固定しなくなり、本来のphp.ini の設定を使用するようになった。
  • DboSource::insertMulti boolean の操作を正しくおこなえるようになった。
    • PDO の使用により、プリペアドステートメントのデータバインド時に、型情報を正しく伝えるように変更
  • Helper::field 「min」のフィールド名を時間(分)以外の意図で作成した際、fieldSuffixes に該当し、正しく フォームが作成されなかったのを修正
  • SessionHelper::flash プラグインのエレメントの読み込みを正しく扱えなかったのを修正
    • 1.3系では正常に動作していた
  • PHP5.4 へ対応
    • strict errors の修正
    • 参照渡しの削除
  • requestAction POSTデータ送信時エラーが発生するを修正