【问题标题】:Compare Two DateSelect Form Values比较两个 DateSelect 表单值
【发布时间】:2016-01-28 15:42:18
【问题描述】:

我的表单中有两个 Zend\Form\Element\Dateselect 元素,我正在尝试验证 dateEnd > dateBeg

这些是我表单中的值:

    $startDate = new DateSelect('dateBeg');
    $startDate->setLabel('Start Date');
    $startDate->setMinYear(2016);
    $startDate->setMaxYear(date("Y"));
    $startDate->setDayAttributes(array(
        'name' => 'dayBeg',
    ));
    $startDate->setMonthAttributes(array(
        'name' => 'monthBeg',
    ));
    $startDate->setYearAttributes(array(
        'name'=> 'yearBeg',
    ));
    $this->add($startDate);

    $endDate = new DateSelect('dateEnd');
    $endDate->setLabel('End Date');
    $endDate->setMinYear(2016);
    $endDate->setMaxYear(date("Y"));
    $endDate->setDayAttributes(array(
        'name' => 'dayEnd',
    ));
    $endDate->setMonthAttributes(array(
        'name' => 'monthEnd',
    ));
    $endDate->setYearAttributes(array(
        'name'=> 'yearEnd',
    ));
    $this->add($endDate);

我看到了比较两个 Date 元素的解决方案:zend framework 2 - compare 2 inputs using validator?

我尝试在我的验证文件中使用它,但 dateEnd 的验证似乎只受“必需”过滤器的影响,而不是我的自定义验证器。

    $inputFilter->add($factory->createInput(array(
            'name' => 'dateEnd',
            'required' => false,
            'validators' => array(
                array(
                    'name' => 'Callback',
                    'options' => array(
                        'messages' => array(
                                \Zend\Validator\Callback::INVALID_VALUE => 'The end date should be greater than start date',
                        ),
                        'callback' => function($value, $context = array()) {                                     
                            $startDate = \DateTime::createFromFormat('Y-m-d', $context['dateBeg']);
                            $endDate = \DateTime::createFromFormat('Y-m-d', $value);
                            return $endDate > $startDate;
                        },
                    ),
                ),                          
            ),
        )));

我修改了我的表单以使用Date 而不是DateSelect,并且此验证似乎按预期工作,但我更喜欢使用DateSelect 元素。我的猜测是Callback 函数/验证器有问题,因为我在那里使用了调试消息,但它们没有被调用。我的表单上没有调用此验证器是否有原因?

【问题讨论】:

    标签: php zend-framework2


    【解决方案1】:

    我没有使用正确的方法来调用我的.phtml 文件中的表单。我漏掉了:

      $this->form->prepare();
      $this->form->setAttribute('action', $this->url('controller/action'));
      $this->form->setAttribute('method', 'post');
      $this->form->setAttribute('autocomplete', 'off');
    

    因此,表单在之后正确呈现。否则,您在表单中提交了日、月、年元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      相关资源
      最近更新 更多