CakePHP4で会員一覧ページを作っています。
写真はオプションとして、アップロードしなくても登録が完了するように作りたいと思っています。
画像をアップロードした場合は登録が完了できるのですが、
アップロードせずにsubmitを押した場合に、エラーが出てしまいます。
debugで検証したところ、patchEntityの部分で上手く通っていないことはわかったのですが、
ModelのTableでAllowEmptyFileをバリデーションで書いてあるのですが、それでも解決しませんでした。
ご教授よろしくお願いいたします。
**<EmployeesController.php>** public function add() { $employee = $this->Employees->newEmptyEntity(); if ($this->request->is('post')) { // imageデータを変数に代入 $image = $this->request->getData('image'); // ファイル名を取得 $name = $image->getClientFilename(); // パスルートの指定 $path = WWW_ROOT . 'img/review/' . DS . $name; // move_uploaded_file if (!$name == "") { $image->moveTo($path); } $employee = $this->Employees->patchEntity($employee, $this->request->getData()); //**エラーの箇所** //dd($this->request->getData()); $employee->image = $name; if ($this->Employees->save($employee)) { $this->Flash->success(__('The employee has been saved.')); return $this->redirect(['action' => 'employeeAll']); } $this->Flash->error(__('The employee could not be saved. Please, try again.')); } $this->set(compact('employee'));
**<table>** public function validationDefault(Validator $validator): Validator { ~~~ $validator ->scalar('image') ->maxLength('image', 255) ->allowEmptyFile('image'); return $validator; } }
<?php declare(strict_types=1); namespace App\Model\Entity; use Cake\ORM\Entity; use Cake\Auth\DefaultPasswordHasher; /** * Employee Entity * * @property int $id * @property string $name * @property string $password * @property string|null $image * @property string $email * @property int $role * @property \Cake\I18n\FrozenTime $created * @property \Cake\I18n\FrozenTime $modified */ class Employee extends Entity { /** * Fields that can be mass assigned using newEntity() or patchEntity(). * * Note that when '*' is set to true, this allows all unspecified fields to * be mass assigned. For security purposes, it is advised to set '*' to false * (or remove it), and explicitly make individual fields accessible as needed. * * @var array */ protected $_accessible = [ 'name' => true, 'password' => true, 'image' => true, 'email' => true, 'role' => true, 'created' => true, 'modified' => true, ]; /** * Fields that are excluded from JSON versions of the entity. * * @var array */ protected $_hidden = [ 'password', ]; protected function _setPassword($password) { if (strlen($password) > 0) { return (new DefaultPasswordHasher)->hash($password); } } }
dd($this->request->getData());のアップロードした場合
dd($this->request->getData());のアップロードしない場合
回答1件
あなたの回答
tips
プレビュー