我想在symfony2中创建一个名为daterange
的自定义表单字段,它将扩展默认的symfony日期类型表单字段,并将日期范围(开始日期和结束日期)放入两个不同的文本框中。
答案 0 :(得分:23)
因为我不喜欢这个例子的twig模板引擎只用于PHP模板
您需要做的是:
新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')
将其添加到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。
答案 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关于创建自定义字段类型