HiddenでのPOSTデータの保存処理を書いていたのだが、どうも挙動がおかしいことがありいろいろいじってみた。
編集処理の場合、保存済みのデータとPOSTデータをpatchEntity()でマージする。
で、Hidden属性のデータで中身がNULLのものをマージしたら、Entityになぜか前のデータが残ってしまっていた。
バージョン
CakePHP 3.8
これは明らかにバグだと思う。
一応、ヴァリデーションは正しく判定できていた。(今回は入力必須)
ざっとそれらしきところしか追いかけてないが、そもそもpatchEntity()に渡すデータの中にhiddenかどうか判断できるデータがない。
じゃあ、patchEntityした後に、エンティティ―に手動でデータを上書きしてあげたのだが、そうするとヴァリデーション判定が消えてしまうようだった。
ということでお手上げ…。
ただ、ヴァリデーションは正しく判定できており、今回ヴァリデーションはNULL不許可なので、テンプレート側でエラーがあったらフォームのvalueを手動でNULLにして出力することで対応した。
[quads id=1]