我正在使用带有标准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 :(得分:0)
在 def self.actives(active)
user = all
user = user.where("active = ?", active)
return user
end
类中,为此目的有一个AbstractValidator
方法。你可以找到它here on line 329 on GitHub。
因此,在验证期间,您发现某个值无效,您可以这样做:
error
通常,密钥作为常量存储在验证器类中:
$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);
详细了解编写自定义验证程序here in the official ZF2 docs