无法为Zend Framework 2日期表单元素设置日期格式?

时间:2015-10-26 20:18:40

标签: php date zend-framework2

我只想尝试在表单中创建一个Date元素,但日期格式总是" mm / dd / yyyy"无论我如何改变它。我尝试这样设置:

    $this->add(array(
        'name' => 'ct-start_date',
        'options' => array(
                    'label' => 'Start Date',
                    'format'=>'Y-m-d'
                    ),
        'attributes' => array(
            'class' => 'ct-date',
        ),
        'type'  => 'Zend\Form\Element\Date',
    ));

显示如下:

    echo $this->formRow($form->get('ct-start_date'));

但它仍然出现在" mm / dd / yyyy"即使我这样做了:

    print_r($form->get('ct-start_date')->getFormat());

出现为" Y-m-d"!所以我补充说:

    $this->get('ct-start_date')->setOptions(array('format'=>'Y-m-d'));

没有变化。然后我尝试了这个:

    $date = new Element\Date('ct-start_date');
    $date
        ->setLabel('Start Date')
        ->setAttributes(array(
            'class' => 'ct-date',
        ))
        ->setOptions(array(
            'format' => 'Y-m-d'
        ));
    $this->add($date);

同样的事情!这是Chrome中的内容。在Firefox中,它只是一个空文本输入。也许我应该回到jQuery。

1 个答案:

答案 0 :(得分:0)

Date元素中的format选项不会影响元素中日期的输入或输出格式。

元素的getInputSpecification()方法使用它来确定与验证器一起使用的日期格式。

示例:

$this->add(array(
    'name' => 'ct-start_date',
    'options' => array(
                'label' => 'Start Date',
                'format'=>'Y-m-d'
                ),
    'attributes' => array(
        'class' => 'ct-date',
    ),
    'type'  => 'Zend\Form\Element\Date',
));

//...

public function getInputFilter()
{
    $filter = new InputFilter()

    // add default filters and validators for the date element
    // the date validator will automatically be set up to accept dates
    // formatted according to your elemen's "format" option
    $filter->add($this->get('ct-start-date')->getInputSpecification());

    ../
    return $filter;
}

如果要使用服务器端的日期值填充表单元素,则需要采用适当的格式(例如$element->setValue(date('Y-m-d', $date));

在客户端,他们要么需要以适当的格式键入它,要么验证者将返回错误,或者确保您使用的任何客户端日期输入都将其置于Y-m-d格式。< / p>