2011-06-28 166 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'的路徑 - 在文檔中並不明顯。謝謝。 –

    相關問題