Обязательное поле, только если установлен флажок 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.