必须填写至少一个字段,cakephp验证

brn*_*nmg 1 cakephp

我有4个可选字段,但必须填写至少1个字段(任何字段)?

这么简单吗?

dec*_*eze 6

一个自定义的验证规则是要走的路!

var $validate = array(
    'myField1' => array('atLeastOne'),
    'myField2' => array('atLeastOne'),
    'myField3' => array('atLeastOne'),
    'myField4' => array('atLeastOne')
);

function atLeastOne($data) {
    return !empty($this->data[$this->name]['myField1'])
           || !empty($this->data[$this->name]['myField2'])
           || !empty($this->data[$this->name]['myField3'])
           || !empty($this->data[$this->name]['myField4']);
}
Run Code Online (Sandbox Code Playgroud)

您还可以传递要比较的所有字段的额外参数,并从中生成更通用的功能.

var $validate = array(
    'myField1' => array('atLeastOne', 'myField2', 'myField3', 'myField4'),
    ...
);

// just pulled out of thin air (i.e. untested)
function atLeastOne($data) {
    $args = func_get_args();  // will contain $data, 'myField2', 'myField3', ...

    foreach ($args as $name) {
        if (is_array($name)) {
            $name = current(array_keys($name));
        }
        if (!empty($this->data[$this->name][$name])) {
            return true;
        }
    }

    return false;
}
Run Code Online (Sandbox Code Playgroud)