zf2 inputfilter — как вернуть неудачную пользовательскую проверку

Я использую входной фильтр со стандартными валидаторами / фильтрами ZF2. Однако я также расширяю \My\InputFilter::isValid метод, включающий проверку для конкретного домена, например сравнение определенных частей дат.

В этом методе, как я могу сигнализировать, что проверка не удалась, с конкретным сообщением об ошибке для неисправных элементов? Я могу вернуть false из метода, но это не дает дополнительной информации о том, почему проверка не удалась.

то есть:

    public function isValid($context = null){

$latestCollectionInput = $this->get('latestCollectionTime');
$requestedCollectionTime = $this->get('requestedCollectionTime');

$date1 = \DateTime::createFromFormat('d/m/Y H:i', $latestCollectionInput->getRawValue());
$date2 = \DateTime::createFromFormat('d/m/Y H:i', $requestedCollectionTime->getRawValue());

if($date1->format('N') !== $date2->format('N')){
/* how to return failed validation for these elements */
}

return parent::isValid($context);
}

0

Решение

в AbstractValidator класс есть error метод для этой цели. Вы можете найти это здесь на линии 329 на GitHub.

Поэтому, когда во время проверки вы обнаружите, что значение является недействительным, вы можете сделать:

$this->error($key, $value);

Обычно ключи хранятся в классе валидатора как константы:

const ERROR_DATE_NOT_VALID = 'dateNotValid';
const ERROR_NOT_FUTURE_DATE = 'dateNotFutureDate';

И соответствующие сообщения хранятся в $messageTemplates массив:

protected $messageTemplates = array(
self::ERROR_DATE_NOT_VALID => "Date must be a string and must be formatted as yyyy-mm-dd",
self::ERROR_NOT_FUTURE_DATE => "The provided date must be in the future",
);

Когда входной фильтр собирает сообщения об ошибках при неудачной проверке, переданный вами ключ будет использоваться для поиска сообщения в списке шаблонов. Эти сообщения будут возвращены. Поэтому, когда вы выдаете ошибку, используя ключ, как это:

$this->error(self::ERROR_DATE_NOT_VALID, $value);

Сообщение, которое будет возвращено, будет:

"Date must be a string and must be formatted as yyyy-mm-dd"

Узнайте больше о написании пользовательских валидаторов здесь, в официальных документах ZF2

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]