日々の業務内でファイルアップロード関連の作業をしていた時、ふと、気づきました。
レスポンスがいつのまにかLaminas\Diactoros\UploadedFileobject
になっている??
どうやら、Cakephp4から画像関連もオブジェクト形式で操作できるようになっているようです。
目的としては、Objectにすることで柔軟性、テスト性を上げるためだと思いますが、ドキュメントを読んでいると、今までのように配列形式で返すことも可能なようです。
今取り掛かっている案件は、できるだけ従来の形を変えないままにすることが大事なので、影響範囲が少ない従来通りの配列形式に戻す形にしてみました。
対象ファイル: config/app.php
app.php
return [
// ...
'App' => [
// ...
'uploadedFilesAsObjects' => false,
],
// ...
];
新規に開発する場合は配列に戻すメリットはあまりなさそうだし、Objectで処理すればよいと思います。
設定変更後、$this->request->getData()の中身
$this->request->getData()の中身
[
'name' => 'attachment.txt',
'type' => 'text/plain',
'size' => 123,
'tmp_name' => '/tmp/hfz6dbn.tmp'
'error' => 0
]
これで、旧バージョン通りの形式で操作できるので、既存コードに適用しやすくなりました。
※ Cake5では存在しなくなるオプションです。画像を利用する場合、オプジェクトとして扱いましょう。てか、Cake2などからアップデート以外はあまり不要なオプションだったと思います。
引用:
構成App.uploadedFilesAsObjectsオプションは、フレームワーク全体での PHP ファイル アップロードの整形配列のサポートとともに削除されました。
ソース元は公式だけど、どこか忘れちゃった..