模型验证规则的默认值

时间:2012-11-25 14:36:14

标签: validation cakephp model cakephp-2.3

我对模型字段的默认值有疑问,这个问题让我疯狂了一段时间。

举个例子,我有一个模型,其状态字段必须经过验证:

$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)中没有提到第三个参数,默认为true。

来自in_array文档:

  

如果第三个参数strict设置为TRUE,那么in_array()   函数还将检查大海捞针的类型。

它仍然无法解决我的问题,但现在我知道为什么数组('inList',数组('0','1'))没有验证空字段,即使allowEmpty设置为true。

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用beforeSave方法设置默认值。不要忘记返回true,否则你将中止保存。