Symfony 2.8 表单/Twig: Twig 以错误的方式渲染我的输入(type=date)。

4

我希望在页面渲染时,可以显示日期输入框(type=date),但是实际上只显示了文本输入框(type=text)。

<html>
    <head></head>
    <body>
        <input id="test_form_studentdob" class="normal" type="text" placeholder="DD-MM-YYYY" name="test_form[studentdob]">
    </body>
</html>

我已经尝试过以下内容:

  1. 多种浏览器(包括桌面和移动端)

  2. 删除了所有在

    标签内加载的CSS/JS。其中包括加载jQuery/jQuery/bootstrap UI库。

有什么想法是我可能做错了什么吗?谢谢。

Symfony控制器代码片段:

/**
 * @Route("/test")
 */
public function testAction(Request $request) {
    $form = $this->createForm(new TestFormType());
    $form->handleRequest($request);

    return $this->render(
        "AppBundle:SelfService:TestForm.html.twig"
        , array("form" => $form->createView())
    );
}

Symfony表单类型类:

<?php
// src/appBundle/Form/TestFormType.php
namespace AppBundle\Form;

use Symfony\Component\Form\AbstractType
    , Symfony\Component\Form\FormBuilderInterface
    , Symfony\Component\OptionsResolver\OptionsResolverInterface;

class TestFormType extends AbstractType {
    public function setDefaultOptions(OptionsResolverInterface $resolver) {
        $resolver->setDefaults(
            array(
                "attr" => array(
                        "id" => "testform"
                )
            )
        );
    }

    public function buildForm(FormBuilderInterface $builder, array $options) {
        $builder
            ->setMethod("GET")
            ->add(
                "studentdob"
                , "date"
                , array(
                    "attr" => array(
                        "class" => "normal"
                        , "placeholder" => "DD-MM-YYYY"
                    )
                    , "format" => "dd-MM-yyyy"
                    , "required" => false
                    , "widget" => "single_text"
                )
            );
    }
}

这是我的Twig模板:
{% block body %}
    {{ form_widget(form.studentdob) }}
{% endblock %}

你的实体中的字段类型是什么? - Filchev
也可以尝试删除这个, "widget" => "single_text" - Filchev
@Filchev 我编辑了我的原始帖子。但由于它与实体无关,所以我不会将我的表格附加到任何实体上。 - mrjayviper
根据我在Symfony网站上(http://symfony.com/doc/2.8/reference/forms/types/date.html#widget)阅读的内容,widget = single_text是将输入渲染为type = date的方法。 - mrjayviper
1
遗憾的是,破坏你的字段类型的事情是你所需要的日期格式 -> dd-MM-yyyy。我相信浏览器不支持它。为了实现这个功能,使用一些来自jquery UI的datetimepicker小部件。 - Filchev
1个回答

2

HTML日期输入有一个独特的格式:年-月-日

有效的完整日期,定义在RFC 3339中,额外的限定是年份组件是四位或更多数字,表示大于0的数字。

如果您想使用其他格式,必须使用文本输入。

因此,在指定其他格式时,Symfony会使用带有模式属性的文本输入。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接