zf2 inputfilter - 如何返回失败的自定义验证

时间:2016-04-18 01:01:54

标签: php zend-framework2 zend-validate zend-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);
    }

1 个答案:

答案 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