DEVELOPERS BLOGデベロッパーズブログ
Fedora 25 以降の環境では、PHP 7.x がインストールされる。この環境でCakePHP の最新リリース (3.x) をインストールすると、インストール自体は問題なくても CakePHP を実行した時点で以下のような警告が表示され、結果として正しく動作しない。
Warning (2): Declaration of Cake\Chronos\Traits\FrozenTimeTrait::setTime($hours, $minutes, $seconds = 0) should be compatible with DateTime::setTime($hour, $minute, $second = NULL, $microseconds = NULL) [ROOT/vendor/cakephp/chronos/src/MutableDate.php, line 24]
Warning (2): Declaration of Cake\Chronos\Traits\FrozenTimeTrait::setTime($hours, $minutes, $seconds = 0) should be compatible with DateTimeImmutable::setTime($hour, $minute, $second = NULL, $microseconds = NULL) [ROOT/vendor/cakephp/chronos/src/Date.php, line 24]
原因は、PHP 7.x で DateTime::settime() メソッドの引数に第4パラメータとしてマイクロ秒 (省略可) が追加され、setTime() を継承する FrozenTimeTrait::setTime() のパラメータ (3個) と引数の個数一致しなくなったことのようだ。
取り敢えずの措置としては ROOT/vendor/cakephp/chronos/src/Traits/FrozenTimeTrait.php の
public function setTime($hours, $minutes, $seconds=0)
を
public function setTime($hours, $minutes, $seconds=0, $microseconds=0)
のように変更することで CakePHP 3.x 自体は動作するようになる。
ただし、CakePHP の更新で composer を実行した場合の結果は不明だ。(FrozenTimeTrait.php が更新されて FrozenTimeTrait::setTime() が元の3引数のものに戻されてしまう可能性がある。)
恐らく旧バージョンの PHP 対応のため3引数で定義しているのだと思うが、厄介なことだ。
この記事は加藤 正人さんが書いています!
- 氏名
- 加藤 正人
- 役職
- 多分SE
- 血液型
- 秘密
- 出没
- 美味しいもののあるところ
- 特色
- タヒチ大好き。ちょいメタボ。
- 2020/12/15
- CakePHP3 のリダイレクトがうまく行かない例
- 2020/11/12
- Apache Bench
- 2020/10/05
- PhpSpreadsheet でExcel ファイルを読み込む (CakePHP3)
2020/12/15
2020/11/12
2020/10/05
2020/09/11
2020/08/03