Обязательное поле, только если установлен флажок CakePHP 2 Validation

Вот проблема

Я хочу требовать поле (litters_per_year) только в том случае, если установлено другое поле, которое является флажком. Когда я делаю это, торт пытается заставить меня поставить ценность в поле, и я не знаю почему. Я попытался установить значения required и allowEmpty в false и true соответственно, но мое пользовательское правило не запускается.

Вот код

ПРИМЕЧАНИЕ. Детали следующего кода не так важны - они здесь, чтобы предоставить сценарий.

У меня есть следующий код в моем виде, который работает нормально:

echo $this->Form->input('litters_per_year', array(
    'label' => 'Litters per year (average)'
));

У меня есть следующий код в общедоступной $ validate МОДЕЛИ:

'litters_per_year' => array(
    'isNeeded' => array(
        'rule' => array('isNeeded', 'litters_per_year'),
        'message' => 'Please enter the litters per year average'
    )
)

который вызывает пользовательский метод проверки

public function isNeeded($field) {
    // Check if a checkbox is checked right here
    // Assume it is not... return false
    return false;
}

Для простоты решить эту проблему возвращает false.

Давайте предположим, что поле флажка называется "the_checkbox".

1 ответ

На данный момент ваше поле всегда должно проходить проверку, так как вы возвращаете false от isNeeded,

Чтобы заставить его работать так, как вы ожидаете, сделайте что-то вроде этого:
(Примечание: замените "ModelName" на название вашей модели)

public function isNeeded($field) {
    if ($this->data['ModelName']['the_checkbox']) {
        // Checkbox is checked, so we have to require litters per year
        if (empty($field)) {
            // They have checked the box but have NOT entered litters_per_year
            // so we have a problem. NOT VALID!
            return false;
        } else {
            // They have checked the box, and entered a litters_per_year
            // value, so all good! Everything is valid!
            return true;
        }
    } else {
        // Checkbox is not checked, so we don't care what 
        // the field contains - it is always valid.
        return true;
    }
}

Или без ненужного многословия это должно работать:

public function isNeeded($field) {
    if ($this->data['ModelName']['the_checkbox']) {
        return $field;
    } else {
        return true;
    }
}

В этом примере, если флажок установлен, проверка пройдёт, если $field true, и завершится ошибкой, если false.

Другие вопросы по тегам