1

我有一个模型,其中包含名字、姓氏和组织/公司名称字段。用户必须输入名字和姓氏或组织名称。

问题是我的自定义验证方法(“validateNames”)从未被调用。出于调试目的,我在那里有一个“die”语句,而不是真正的验证逻辑——但从未达到 die 语句。

我的模型看起来像:

class Contact extends AppModel {
    public $validate = array(
        'first_name' => array(
            'rule' => 'validateNames',
            'allowEmpty' => true,
            'required' => false
        ),
        'last_name' => array(
            'rule' => 'validateNames',
            'allowEmpty' => true,
            'required' => false
        ),
        'organization' => array(
            'rule' => 'validateNames',
            'allowEmpty' => true,
            'required' => false
        )
    );

    public function validateNames($check) {
        die('here');
    }
}

问题是只要我在验证规则中有“allowEmpty”,我的自定义验证方法就永远不会被调用(并且永远不会达到“die”语句)。但是,如果我删除“allowEmpty”,那么每个 INPUT 字段都会添加一个 HTML“必需”属性(即使我有 'required' => false)——这会阻止表单被提交,除非所有三个字段都已填写,当实际上只需要一个(组织)或两个(名字和姓氏)时。

4

2 回答 2

1

从验证规则中删除 allowEmpty 选项,并在输出视图中的字段时禁用必需选​​项。尝试这个:

型号

class Contact extends AppModel {
    public $validate = array(
        'first_name' => array(
            'rule' => 'validateNames'
        ),
        'last_name' => array(
            'rule' => 'validateNames'
        ),
        'organization' => array(
            'rule' => 'validateNames'
        )
    );

    public function validateNames($check) {
        die('here');
    }
}

查看

echo $this->Form->input('first_name', array('required' => false));
echo $this->Form->input('last_name', array('required' => false));
echo $this->Form->input('organization', array('required' => false));
于 2014-04-21T15:19:30.570 回答
1

如果要使用相同的字段调用 2 个或多个验证,则必须传入数组

喜欢

class Contact extends AppModel {
    public $validate = array(
        'first_name' => array(
           'rule1' => array(
                    'rule' => 'validateNames',
                    'message' => 'Must be a valid first name',
                    'allowEmpty' => true
                ),
        ),
        'last_name' => array(
            'rule1' => array(
                    'rule' => 'validateNames',
                    'message' => 'Must be a valid names',
                    'allowEmpty' => true
                ),
        'organization' => array(
            'rule' => 'validateNames',
            'allowEmpty' => true,
            'required' => false
        )
    );
public function validateNames($check) {
    die('here');
}

}

让我知道我是否可以为您提供更多帮助。

于 2013-05-08T04:22:23.723 回答