cakephp3のnotEmptyの罠

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

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



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

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



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


こうすれば解決する。

おわり

宮川
新人エンジニア