CakePHP自定义验证方法未使用allowEmpty调用

时间:2013-05-08 02:35:12

标签: cakephp cakephp-2.3

我有一个具有名字,姓氏和组织/公司名称字段的模型。用户必须输入名字和姓氏或组织名称。

问题是我的自定义验证方法(“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”属性(即使我有'required'=> false) - 这会阻止提交表单,除非填写所有三个字段,当实际只需要一个(组织)或两个(名字和姓氏)时。

2 个答案:

答案 0 :(得分: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');
}

}

请告诉我是否可以为您提供更多帮助。

答案 1 :(得分: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));