如何使symfony表单支持datetime-local输入类型?

时间:2016-03-31 10:37:57

标签: php html5 datetime symfony formbuilder

大多数浏览器都将datetimedatetime-local的支持作为有效输入类型。截至撰写此问题时,支持datetime-localdatetime支持更多(几乎不存在)。

如果您使用Symfony的表单构建器构建表单,则它支持datetime但不支持datetime-local。那么如何使symfony表单构建器接受datetime-local输入类型并保持输入类型的其余功能相同?

1 个答案:

答案 0 :(得分:3)

这个问题可以解决的一种方法是,如果我们可以将输入类型的文本改为datetime-local,可以通过覆盖DateTimeType并使用它来完成。

<?php

namespace AppBundle\Component\Form\Extension\Core\Type;

use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormView;

class DateTimeType extends \Symfony\Component\Form\Extension\Core\Type\DateTimeType
{
    /**
     * {@inheritdoc}
     */
    public function buildView(FormView $view, FormInterface $form, array $options)
    {
        $view->vars['widget'] = $options['widget'];

        // Change the input to a HTML5 datetime input if
        //  * the widget is set to "single_text"
        //  * the format matches the one expected by HTML5
        //  * the html5 is set to true
        if ($options['html5'] && 'single_text' === $options['widget'] && self::HTML5_FORMAT === $options['format']) {
            $view->vars['type'] = 'datetime-local';
        }
    }

}