8

我希望在 symfony2 中创建一个可重复使用的日期时间选择器。这个想法是它将由 3 个单独的输入参数组成。我将使用完整的信息更新问题,以便其他人可以使用我的发现。

{文本输入} {选择小时} {选择时间}

问题是如何创建将 3 个输入组合为一个的自定义可重用表单。

我附上了一个截图,让我了解我想要达到的目标

在此处输入图像描述

symfony 文档
http://symfony.com/doc/current/cookbook/form/create_custom_field_type.html#creating-a-template-for-the-field

4

2 回答 2

14

您可以简单地使用jquery.datetime 选择器来显示日期时间选择器或仅显示其中一个(日期或时间)。

我最近在我的一个网站上制作。

$builder->add('dateheure', 'datetime', array('date_widget' => "single_text", 'time_widget' => "single_text"));

并在您的页面上调用 jquery、datetime css 和 js:

<link rel="stylesheet" type="text/css" href="jquery.datetimepicker.css"/ >
<script src="jquery.js"></script>
<script src="jquery.datetimepicker.js"></script>

然后在您的字段上激活 datetimepicker:

$(function(){
    $("#form_dateheure input").each(function(){
        $(this).attr("readonly","readonly");
    });
    $('#form_dateheure_date').datetimepicker({
        format: "Y-m-d",
        timepicker: false,
        datepicker: true,
    });
    $('#form_dateheure_time').datetimepicker({
        format: "H:i",
        timepicker: true,
        datepicker: false,
        step:5
    });
});
于 2014-03-11T09:55:21.260 回答
1

作为示例,您可以查看DateTime字段。检查源代码

从广义上讲,首先创建自定义表单类型,当您可以将其添加到表单中时。例如

class DateTimeType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('date', 'text');
        $builder->add('hour', 'choice', array(...));
        $builder->add('minute', 'choice', array(...));
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
    }

    public function getParent()
    {
        return 'form';
    }

    public function getName()
    {
        return 'date_time';
    }
}

其次添加数据转换器,它将把你的 html 数据从 3 个字段转换为一个DateTime对象。

于 2013-07-23T10:20:57.350 回答