Однако мой методallowEmpty никогда не вызывается, и при проверке, похоже, используется пустая проверка по умолчанию. Из-за этого мой пользовательский валидатор не запускается для значений, которые я не хочу рассматривать как «пустые», что нежелательно.
Вот упрощенная версия моего валидатора и тестового кода:
Код: Выделить всё
class MyStrictValidator extends \Phalcon\Filter\Validation\AbstractValidator {
protected $template = 'Field `:field` is invalid!';
// This method is never called!
public function allowEmpty($field, $value): bool
{
echo 'Executing allowEmpty!' . PHP_EOL;
$allowEmpty = $this->getOption("allowEmpty", false);
if (is_array($allowEmpty)) {
$allowEmpty = $allowEmpty[$field] ?? false;
}
// My custom rule: only null is considered empty.
return $allowEmpty && is_null($value);
}
// validate is also never called
public function validate(\Phalcon\Filter\Validation $validation, $field): bool
{
$value = $validation->getValue($field);
if ($this->allowEmpty($field, $value)) {
return true;
}
// My actual validation logic...
if (!is_int($value)) {
$validation->appendMessage(
$this->messageFactory($validation, $field, [':field' => $field])
);
return false;
}
return true;
}
};
// Test Code
$data = ['foo' => '']; // '' is not "empty" by my custom rule.
$validation = new \Phalcon\Filter\Validation();
$validation->add('foo', new MyStrictValidator([
]));
$validation->validate($data);
if (!$validation->isValid()) {
foreach ($validation->getMessages() as $message) {
echo $message->getMessage() . PHP_EOL;
}
} else {
echo 'OK' . PHP_EOL;
}
// Actual Output: "OK"
// Expected Output: "Field `foo` is invalid!" because '' is not empty for this validator.
Palcon 5.8.0
Подробнее здесь: https://stackoverflow.com/questions/797 ... how-to-fix
Мобильная версия