[CakePHP3]2つのファイルアップロードのうちどちらか一方を必須にしたい
https://book.cakephp.org/3.0/ja/core-libraries/validation.html#id9
ここにあるように条件付きバリデーションで実装しようとしてnotEmpty()メソッドに on オプションをつけてみたが、$this->Form->file()でレンダリングされた時点で全てのファイルアップロードフィールドに required 属性が付与されてしまって全てが必須になってしまう。
こういう時は時間があればバリデーションクラスを実装する方が美しいが、余裕がなければ標準から外れてしまうが思い切ってバリデータの使用は諦めて、コントローラーで実装してしまった方が早い。
その場合、エラーメッセージはEntityクラスのsetError()メソッドを使って、
1 2 3 4 5 6 7 8 9 10 11 12 | $foo = $this->Foos->patchEntity($foo, $this->request->getData()); if ($foo->getErrors()) { // 入力チェックエラー } else if (!isset($this->request->getData('file1')['name']) && !isset($this->request->getData('file2')['name'])) { // 独自のバリデーションエラー $foo->setError('file1', 'ここにエラーメッセージを書く'); } else { // 保存処理など } |
のような形でセットしてやれば、画面の方で他のバリデーションエラーと同様に表示ができる。
—-