2
votes

In \Zend\Validator\DateStep, I want to override the error message shown below:

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

I have an input filter connected to a form containing an element of the type 'Zend\Form\Element\Date' which automatically calls the DateStep validator.

Here is the relevant part of my form:

$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
         )
     ));

Here is my input filter:

$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',
                        ),
                    ),
                ),
            ),
        )));

The inputFilter seems to be ignored. I tried setting up the step and baseValue in the inputFilter, but that seems to not work at all. Working app can be found here: https://github.com/bickerstoff/zf2_datetest if more details are needed.

1

1 Answers

1
votes

Looks like you're trying to filter a "Date" input with a "DateStep" validator.

$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
      )
));

This may cause your problem.