LoginSignup
3
4

More than 5 years have passed since last update.

CakePHP3.1 → 3.2アップグレードで対応すべき点

Posted at

PHP 5.5.9 以上が要求されるのが一番大きかった(私には)のですが、バージョンアップに伴って他にも修正しなければならないところが少しあったので書いておきます。(これ以外にもあると思いますが、私がやったことだけ)

FormHelperのcreate()でactionを指定しているものをurlに変える

テンプレートでFormHelper::create()を使って

src/Template/Users/hoge.ctp
<?= $this->Form->create($user, ['action' => 'index']) ?>

としてurlのactionを指定していたものは、

src/Template/Users/hoge.ctp
<?= $this->Form->create($user, ['url' => ['action' => 'index']]) ?>

に変更する必要があります。

Entityで仮想フィールドを定義したものは、スネークケースで取得する

CakePHP3.1までは、Entityで

src/Model/Entity/User.php
protected function _getFullName()
{
    return $this->_properties['first_name'] . ' ' . $this->_properties['last_name'];
}

のように定義した仮想フィールドは、$user->fullName でも $user->full_name でも取れていましたが、3.2では $user->full_name じゃないとダメになりました。(元々キャメルケースで書くのは間違いだったのでしょうね…)

おまけ(date型とdatetime型のデータについて)

前に少し書きましたが、Chronosが導入されて、DBのTableからデータを取得した時に返ってくるEntityのdate型やdatetime型の値のオブジェクトが変わりました。

CakePHP3.1までは、date型もdatetime型もCake\I18n\Timeオブジェクトが返ってきていましたが、3.2では、date型はCake\I18n\FrozenDate、datetime型はCake\I18n\FrozenTimeになっています。

FrozenDateはCake\Chronos\Dateを、FrozenTimeはCake\Chronos\Chronosをそれぞれ継承しているので、date型のものはタイムゾーンがUTCのオブジェクトになります。
なので、Cake\I18n\TimeCake\Chronos\Chronosで生成した日付(設定されているタイムゾーンになる)と比較している場合などは注意が必要です。
date型のデータと日付を比較する場合は、Cake\Chronos\Dateで生成したものと比較した方が良さそう。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4