cakephp3のnotEmptyの罠

先日cakephp3のvalidationのひとつ、notEmptyではまったので書き留めておく。

notEmptyは空のフィールドを認めないが、フィールドが存在しないことは認めてしまうようだ。
結果としてバリデーションが効かず、DB上で空のフィールドが発生することがある。
例えば以下のような場合。



$entityのtitleのメンバは空ではない(そもそも存在しない)のでバリデーションに引っかからない。
このままsaveすると保存されてしまう。
これを防ぎたい場合、別にフィールドが存在しないことを認めないrequirePresenceをつけてやる必要がある。

これならtitleが存在しない場合もバリデーションが機能する。



ただし、requirePresenceは$dataに相当する部分をチェックしているらしい。
カラムを更新したい場合は気を付けなければならない。
以下のようなものは引っかかるのでダメ。


こうすれば解決する。

おわり

宮川

最近の業務は主に化石調査や遺跡修繕

最新の建築基準に合わせて竪穴式住居を改築するなど

※記事の内容は保証はしておりません(執筆時期や実施環境により挙動が変わるものがある為)。
別途検証してご利用いただくことをおすすめいたします。