DEVELOPERS BLOGデベロッパーズブログ

  1. HOME > 
  2. 加藤 正人のデベロッパーズブログ > 
  3. PHP 7.x で CakePHP 3.x を使う

加藤 正人のデベロッパーズブログ

加藤 正人

氏名
加藤 正人
役職
多分SE
血液型
秘密
出没
美味しいもののあるところ
特色
タヒチ大好き。ちょいメタボ。

加藤 正人

2018/03/06

PHP 7.x で CakePHP 3.x を使う

 

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引数で定義しているのだと思うが、厄介なことだ。

関連タグ: PHP7  CakePHP3 

関連エントリー

PHP3 でデバグモードを一旦無効化した後再度有効化するとDebugKit が見つからない

CakePHP3 で JSON 応答のための定番処理

CakePHP3 でタイムゾーン変換

バージョンを指定して CakePHP をインストールする

CakePHP サイトの移転時の注意

CakePHP3 のアソシエーションで、紐づけ用フィールドを指定する

CakePHP3 のコマンドライン実行

CakePHP3 の Virtual Field と accessor (Getter)

CSRF token mismatch

2019/07/04
CSRF token mismatch

CakePHP3 で created と modified に日付が自動付与されない場合のメモ

CakePHP3 で

CakePHP3 の JSON 出力でエラー

CakePHP3 のミューテータで書き換えたデータが保存されない件

CakePHP3.6.2 のタイムスタンプ調整 (XSERVER の場合)

CakePHP3 で DebugKit が表示されない

最新版 composer.phar のインストール

Remi's PHP5.6 と intl モジュール

X2 と CakePHP 3.x

2017/05/23
X2 と CakePHP 3.x

CakePHP3 の便利機能

CakePHP3 と SQLite

2017/02/20
CakePHP3 と SQLite

CakePHP3 でテーブル不使用フォームのバリデーション

CakePHP3 のファインダーメソッド

CakePHP 3.x の accessor と mutator 【その2】

CakePHP 3.x の accessor と mutator

XSERVER X10 に CakePHP 3.x をインストールする

XSERVER で CakePHP 3.x が Fatal error

CakePHP 3.x インストールメモ

Composer メモ

2015/06/13
Composer メモ