ВОПРОС ОБНОВЛЕН * : я узнал больше информации и поэтому изменил свой вопрос.
Я хочу сохранить своего пользователя с его номером лицензии, но только если он выберет, что у него есть лицензия,У меня есть три возможных значения для поля pilot_type
(ROC, ROC-light и restative), и только последний параметр должен разрешать отправку пустой строки.
Для этого я написалследующая функция проверки:
$validator
->add('license_nr', 'present_if_license', [
'rule' => function ($value, $context) {
return $context['data']['pilot_type'] == 'recreative' || !empty($value);
},
'message' => "If you don't fly recreatively, a license number needs to be supplied"
]);
Проблема заключается в том, что установка любого правила проверки для поля вызовет дополнительную проверку в классе CakePHP Model, которая отклонит значение, если оно пустое. Я попытался исправить это, добавив ->allowEmpty('license_nr')
, но это правило заставляет модель принимать пустую строку даже без запуска моей пользовательской функции. Даже приведение их в порядок и использование 'last' => true
в моем собственном правиле не решает эту проблему:
$validator
->add('license_nr', 'present_if_license', [
'rule' => function ($value, $context) {
return false;
// return $context['data']['pilot_type'] == 'recreative' || !empty($value);
},
'last' => true,
'message' => "If you don't fly recreatively, a license number needs to be supplied"
])
->allowEmpty('license_nr');
Как заставить CakePHP запускать мою пользовательскую функцию, чтобы увидеть, может ли поле быть пустым,а не просто предполагать, что он никогда не может быть пустым или всегда должен быть пустым?