Метод letEmpty пользовательского валидатора Phalcon игнорируется, как исправить?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Метод letEmpty пользовательского валидатора Phalcon игнорируется, как исправить?

Сообщение Anonymous »

Я создал собственный валидатор в Phalcon, расширив Phalcon\Filter\Validation\AbstractValidator. Я реализовал методallowEmpty, чтобы определить собственное правило для того, что следует считать «пустым» значением (в моем случае я хочу разрешить только значение null, а не пустые строки, ноль и т. д.).
Однако мой метод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.
P.S.
Palcon 5.8.0


Подробнее здесь: https://stackoverflow.com/questions/797 ... how-to-fix
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»