環境
- CakePHP 3.8
- josegonzalez/cakephp-upload : 4.0.1
症状
環境が PHP7.2 → PHP7.4 に変更になりまして。
PHP7.4 の状態で、CakePHP3.8 のアプリディレクトリで bin/cake cache clear_all をすると、なんかコンソールのモデルかなんかでエラーが出るようになりました。調べると、PHP7.4 に準拠してない書き方があるためだとわかったので、composer.lock を一度削除して、再度 composer install しました。キャッシュクリア時のエラーは無事なくなり、キャッシュクリアは問題なく出来るようになりました。
が、なぜか今度はアプリから画像のアップロードが出来なくなりました……。
エラーはこんな感じ。↓
2020-12-03 13:01:30 Error: [Error] Class 'League\Flysystem\Adapter\Local' not found (/var/www/myapp/vendor/josegonzalez/cakephp-upload/src/File/Writer/DefaultWriter.php:160)
原因(と対処法?)
アップロードで使っているのは
josegonzalez/cakephp-upload
なんですが、これが require としてるのが、
"require": {
"cakephp/orm": "^3.5",
"league/flysystem": "*"
},
問題はこっちの方。↓
"league/flysystem": "*"
league/flysystem が、今まで1系だったのに、つい最近2系が出たようで、composer install したせいで最新の 2系が入ったんですね。
そのせいで画像アップロードの際に josegonzalez/cakephp-upload から呼び出している League\Flysystem\Adapter\Local が無い!とエラーになっているようでした。確かに、League\Flysystem\Adapter は1系にしかない。なじょして……。
いや、まあ、だいぶファイル構造変わっちゃいましたしね……???
https://github.com/thephpleague/flysystem
さてしかし、これは困った…。
一時的な対応として、大本の composer.json でバージョンを指定してしまうというのは一つの手ですが。
"league/flysystem": "1.*",
ただ、josegonzalez/cakephp-upload さんが、league/flysystem の 2系 に合わせてバージョンアップした場合は、多分またその時にエラーになる。ツラい。
とりあえず、josegonzalez/cakephp-upload さんが対応してくれるのを待ちたい。