如何在symfony2中创建自定义字段类型?

时间:2011-06-28 12:03:35

标签: symfony

我想在symfony2中创建一个名为daterange的自定义表单字段,它将扩展默认的symfony日期类型表单字段,并将日期范围(开始日期和结束日期)放入两个不同的文本框中。

3 个答案:

答案 0 :(得分:23)

因为我不喜欢这个例子的twig模板引擎只用于PHP模板

您需要做的是:

  1. TestBundle\Form\Extension\Core\Type\DateRangeType扩展了Symfony\Component\Form\AbstractType

    在这里你应该:
    一个。编写自己的getParent,getName,buildForm方法
    湾getParent返回'field' C。 getName返回'daterange'
    d。 buildForm有$builder->add('start', ...)->add('end', ...)->setAttribute('widget', 'daterange')

  2. 将其添加到DI(例如config.yml)

  3.     services:
            form.type.daterange:
                class: TestBundle\Form\Extension\Core\Type\DateRangeType
                tags:
                    -  { name: form.type, alias: daterange }
    
    1. TestBundle/Resources/views/Form/daterange_widget.html.php中为其创建新的小部件 你可以把日期小部件作为例子。 Src/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/Resources/views/Form/date_widget.html.php

    2. 添加到配置(config.yml为例)

    3.    framework:
             templating:
                 form:
                     resources:
                         - 'TestBundle:Form'
      

      对于更多小部件自定义,nefo_x表示检查form customization

答案 1 :(得分:6)

为此,您需要将以下行添加到app/config/config.yml

twig:
    form:
        resources:
            - 'YourSuperBundle:Form:fields.html.twig'

然后在src/Your/SuperBundle/Resources/views/Form/fields.html.twig

{% extends 'form_div_layout.html.twig' %}

{% block daterange_widget %}
     ... do the customization.
{% endblock %}

如需其他参考,请阅读Symfony 2.0书籍的form customization

答案 2 :(得分:2)

官方食谱中有good entry关于创建自定义字段类型