2011-06-28 42 views
20

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

+0

您是否在某处发布了代码? –

回答

22

因为我不喜欢树枝模板引擎这个例子只针对PHP模板

你需要的是做:

  1. TestBundle\Form\Extension\Core\Type\DateRangeType延伸Symfony\Component\Form\AbstractType

    在这里你应该:
    a。编写你自己的getParent,getName,buildForm方法
    b。 getParent返回'字段'
    c。 getName返回'daterange'
    d。 buildForm具有$builder->add('start', ...)->add('end', ...)->setAttribute('widget', 'daterange')

  2. 它加入到DI(config.yml为例)

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

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

  •  
        framework: 
         templating: 
          form: 
           resources: 
            - 'TestBundle:Form' 
    

    而对于更多的小部件定制为nefo_x说检查form customization

    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

    +0

    +1提到'fields.html.twig'的路径 - 在文档中并不明显。谢谢。 –

    相关问题