在Zend Framework 2中,如何更改DateStep验证器中的消息

时间:2013-06-01 01:57:31

标签: zend-framework2

在\ Zend \ Validator \ DateStep中,我想覆盖下面显示的错误消息:

protected $messageTemplates = array(
    self::NOT_STEP     => "The input is not a valid step"
);

我有一个输入过滤器连接到一个包含“Zend \ Form \ Element \ Date”类型元素的表单,它自动调用DateStep验证器。

以下是我表格的相关部分:

$this->add(array(
         'type' => 'Zend\Form\Element\Date',
         'name' => 'appointment-date',
         'options' => array(
                 'label' => 'Appointment Date',
                 'format' => 'Y-m-d'
         ),
         'attributes' => array(
                 'min' => date('Y-m-d'), // today's date
                 'max' => '2020-01-01',
                 'step' => '2', // days; default step interval is 1 day
         )
     ));

这是我的输入过滤器:

$inputFilter->add($factory->createInput(array(
            'name'     => 'appointment-date',
            'required' => false,
            'filters'  => array(
                array('name' => 'StripTags'),
            ),
            'validators' => array(
                array(
                    'name' => 'DateStep',
                    'options' => array(
                        //'step'     => new DateInterval("P2D"),
                        //'baseValue' => new DateTime(),
                        'messages' => array(
                                \Zend\Validator\DateStep::NOT_STEP => 'Must be a day in the future',
                        ),
                    ),
                ),
            ),
        )));

inputFilter似乎被忽略了。我尝试在inputFilter中设置step和baseValue,但这似乎根本不起作用。如果需要更多详细信息,可以在此处找到工作应用:https://github.com/bickerstoff/zf2_datetest

1 个答案:

答案 0 :(得分:1)

看起来您正试图使用​​“DateStep”验证器过滤“日期”输入。

$this->add(array(
     'type' => 'Zend\Form\Element\Date',
      'name' => 'appointment-date',
      'options' => array(
          'label' => 'Appointment Date',
          'format' => 'Y-m-d'
       ),
     'attributes' => array(
          'min' => date('Y-m-d'), // today's date
          'max' => '2020-01-01',
           'step' => '2', // days; default step interval is 1 day
      )
));

这可能会导致您的问题。