Настраиваемое правило проверки в CakePHP не работает, как задумано - PullRequest
0 голосов
/ 13 октября 2011

Я написал собственный метод проверки в моей модели представления, который в основном допускает пустое поле ввода, но как только кто-то что-то введет в него, он проверит введенные данные.

Проверка в моей модели представления выглядитвот так (все остальные правила валидации работают, кроме «описания»):

    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'
        ),
    )
);

Мой метод, который также есть в моей модели представления (ниже приведенного выше кода):

    public function validateDescription($data) {
    if(empty($data['Submission']['description']))
        return true;

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

Я не уверен, почему это не работает вообще.На мой взгляд, у меня есть это, чтобы отобразить ошибку:

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

Единственная причина, по которой я пытаюсь это сделать, заключается в том, что я использую обычную проверку с required => false и allowEmpty => true вместе справила проверки minLength и maxLength не работали так, как я планировал.

Любая помощь будет принята с благодарностью!:)

1 Ответ

1 голос
/ 13 октября 2011

Переменная $data, переданная в метод проверки, содержит только array($fieldname => $value). Вы также не возвращаете true для строк длиной более 5. Ваш метод должен выглядеть следующим образом:

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