モデルフィールドのデフォルト値について質問があります。この問題により、しばらくの間私は夢中になっています。
例を挙げると、検証が必要なステータスフィールドを持つモデルがあります。
$validate = array (
...
'status' => array(
'list' => array(
'rule' => array('inList', array('0','1')),
'allowEmpty' => true
)
)
)
データベースに挿入されるデータは、フォームから送信されません。
ステータスフィールドがない場合は、デフォルトで1にします。それ以外の場合は、検証する必要があります。
カスタム検証ルールを使用せずにモデルからこれを行う方法はありますか?MySQLテーブルにデフォルト値を設定できることはわかっていますが、別の値が送信された場合に備えて、モデルからデフォルト値を検証したいと思います。
編集
Validationクラスコードを調べましたが、inList検証はin_arrayチェックのばかげたラッパーにすぎません。
Cake.Utility.Validation.php
public static function inList($check, $list, $strict = true) {
return in_array($check, $list, $strict);
}
ご存知のとおり、CakePHP Api docs
($ strict)に記載されていない3番目のパラメーターもあります。デフォルトはtrueです。
in_arrayドキュメントから:
3番目のパラメーターstrictがTRUEに設定されている場合、in_array()関数は干し草の山の中の針のタイプもチェックします。
それでも問題は解決しませんが、allowEmptyがtrueに設定されていても、array('inList'、array( '0'、 '1'))が空のフィールドを検証しなかった理由がわかりました。
ありがとうございました。