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

21
我希望在Symfony2中创建一个自定义表单字段,名为daterange,该字段将扩展默认的Symfony日期类型表单字段,并将日期范围(开始日期和结束日期)分别放入两个不同的文本框中。

你把代码发布在哪里了吗? - Marijn Huizendveld
3个回答

23

由于我不喜欢Twig模板引擎,因此此示例仅适用于PHP模板

您需要做的是:

  1. 新建一个TestBundle\Form\Extension\Core\Type\DateRangeType,它继承自Symfony\Component\Form\AbstractType

    这里你需要:
    a. 写出自己的getParent、getName、buildForm方法
    b. getParent返回' field'
    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 }
  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(例如config.yml)

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

如 nefo_x 所说,要进行更多的部件定制,请查看表单定制


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书籍中的表单自定义章节。


+1 对于提到 fields.html.twig 的路径 - 文档中并不明显。谢谢。 - Darragh Enright

2

官方食谱中有一篇关于创建自定义字段类型的好文章


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接