1

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

举个例子,我有一个带有必须验证的状态字段的模型:

$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() 函数还将检查大海捞针的类型。

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

谢谢你。

4

1 回答 1

1

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

于 2012-11-25T14:44:13.010 回答