Cakephp4.0で画像のアップロードをしようとしたけど、うまくいかず
長いことハマったので、備忘メモとして書いておきます。
参考になる記事はたくさんあったのですが、どうもうまくいかず。
ようやく以下のマニュアルで解決できました。
https://book.cakephp.org/4/en/controllers/request-response.html
前のバージョンだと、以下のURLが一番わかりやすく参考にさせて頂きました。
https://qiita.com/kurosu66666/items/239e14df7ea20091a53b
この記事の通りに書いてみたのですが、どうにもアップロードの処理で配列じゃない等と怒られてしまう。
解決のためには、Controllerの書き方を以下のように修正する必要があったようです。
UserController.php
public function edit($id = null)
{
$user = $this->Users->get($id);
if ($this->request->is(['patch', 'post', 'put'])) {
$file = $this->request->getData('image'); //受け取り
//ここの書き方が前と違う。メソッドを使うやり方になっている。
$filePath = './webroot/img/' . date("YmdHis") . $file->getClientFilename();
$file->moveTo($filePath);
$user->name = $this->request->getData('name');
$user->image = date("YmdHis") . $file->getClientFilename(); //同じ名前でDBに入れる
if ($this->Users->save($user)) {
$this->Flash->success(__('ユーザー情報が変更されました'));
return $this->redirect(['controller' => 'Users','action' => 'index']);
}
$this->Flash->error(__('ユーザー情報の変更に失敗しました'));
}
$this->set(compact('user'));
}
私の探した限りでは日本語の方のマニュアルには、まだこの内容は載ってないようです。