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

log*_*row 21 symfony

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

小智 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.yml为例)

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

并且对于更多小部件定制,因为nefo_x表示检查表单定制.


nef*_*o_x 6

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

twig:
    form:
        resources:
            - 'YourSuperBundle:Form:fields.html.twig'
Run Code Online (Sandbox Code Playgroud)

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

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

{% block daterange_widget %}
     ... do the customization.
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

如需其他参考,请阅读Symfony 2.0书籍的表格定制.