Validation 模型验证规则的默认值

Validation 模型验证规则的默认值,validation,cakephp,model,cakephp-2.3,Validation,Cakephp,Model,Cakephp 2.3,我有一个关于模型字段默认值的问题,这个问题已经让我疯狂了一段时间 举个例子,我有一个带有必须验证的状态字段的模型: $validate = array ( ... 'status' => array( 'list' => array( 'rule' => array('inList', array('0','1')), 'allowEmpty' => true ) )

我有一个关于模型字段默认值的问题,这个问题已经让我疯狂了一段时间

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

$validate = array (
    ...
    'status' => array(
        'list' => array(
            'rule' => array('inList', array('0','1')),
            'allowEmpty' => true
        )
    )
)
插入数据库的数据不是从表单提交的

如果缺少status字段,我希望它默认为1,否则必须对其进行验证

有没有一种方法可以在不使用自定义验证规则的情况下从模型中执行此操作?我知道我可以在MySQL表中设置默认值,但我仍然希望从模型中验证它,以防提交不同的值

编辑

我查看了验证类代码,inList验证只是用于in_数组检查的愚蠢包装:

Cake.Utility.Validation.php

public static function inList($check, $list, $strict = true) {
   return in_array($check, $list, $strict);
}
您知道吗,还有第三个参数($strict)中没有提到,它默认为true

从in_数组文档:

如果第三个参数strict设置为TRUE,则in_数组() 函数还将检查干草堆中的针的类型

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


谢谢。

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

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

这可能会起作用,除非它没有通过验证规则,即使我添加了'allowEmpty'=>true。我也试过:array('inList',array(''0','1'),但到目前为止运气不好。beforeValidate()怎么样。Hmmm…使用beforeValidate()与添加自定义验证规则不一样吗?但是,我同意没有任何预定义的方法来添加默认值,因此我将继续您的建议,并在beforeSave()中添加一个值。我还将修改inList规则,如下所示:array('inList',array('0','1'),false),否则它将不会验证空字段。这可能会起作用,除非它不通过验证规则,即使我添加了'allowEmpty'=>true。我也试过:array('inList',array(''0','1'),但到目前为止运气不好。beforeValidate()怎么样。Hmmm…使用beforeValidate()与添加自定义验证规则不一样吗?但是,我同意没有任何预定义的方法来添加默认值,因此我将继续您的建议,并在beforeSave()中添加一个值。我还将修改inList规则,如下所示:array('inList',array('0','1'),false),否则它将不会验证空字段。