关于php:CakePHP中的自定义验证规则无法按预期工作

Custom validation rule in CakePHP not working as intended

我在提交模型中编写了一个自定义验证方法,它基本上允许一个空白的输入字段,但是一旦有人在其中输入了一些内容,它就会验证输入的数据。

我的提交模型中的验证如下所示(除"说明"外,所有其他验证规则都有效):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
    var $validate = array(
    'title' => array(
        'title' => array(
            'rule' => 'notEmpty',
            'required' => true,
            'allowEmpty' => false,
            'message' => 'Please enter a title'
        ),
        'minLength' => array(
            'rule' => array('minLength', 5),
            'message' => 'Please make your title longer'
        ),
        'maxLength' => array(
            'rule' => array('maxLength', 300),
            'message' => 'Your title needs to be shorter'
        ),
    ),
    'description' => array(
        'checkDescription' => array(
            'rule' => array('validateDescription'),
            'message' => 'Description must be greater than 5 characters'
        ),
    ),
    'source' => array(
        'source' => array(
            'rule' => 'notEmpty',
            'required' => true,
            'allowEmpty' => false,
            'message' => 'Enter a valid source URL'
        ),
        'website' => array(
            'rule' => 'url',
            'message' => 'Please enter a valid source URL'
        ),
    )
);

我的提交模型(在上述代码下面)中的方法是:

1
2
3
4
5
6
7
    public function validateDescription($data) {
    if(empty($data['Submission']['description']))
        return true;

    if((strlen($data['Submission']['description'])) <= 5)
        return false;
}

我不知道为什么这根本不起作用。在我的视图中,我将显示以下错误:

1
2
    if ($form->isFieldError('Submission.description'))
    echo ($form->error('Submission.description', null, array('class' => 'error')));

我尝试这样做的唯一原因是,使用required => falseallowEmpty => true以及minLengthmaxLength验证规则的正常验证没有达到我的预期效果。

任何帮助都将不胜感激!:)


传入验证方法的$data变量只包含array($fieldname => $value)。对于长度超过5的字符串,您也不会返回true。您的方法应该如下所示:

1
2
3
4
public function validateDescription(array $data) {
    $value = current($data);
    return !$value || strlen($value) > 5;
}