Подтвердить что ты не робот

Как создать собственный тип поля в symfony2?

Я хочу создать пользовательское поле формы в symfony2 с именем daterange, которое расширит поле формы типа даты по умолчанию Symfony и примет диапазон дат (дата начала и дата окончания) в два разных текстовых поля.

4b9b3361

Ответ 1

Причина Мне не нравится шаблон шаблона twig в этом примере только для шаблонов PHP

Что вам нужно сделать:

  • Новый TestBundle\Form\Extension\Core\Type\DateRangeType, который расширяет Symfony\Component\Form\AbstractType

    Здесь вы должны:
    а. написать собственный метод getParent, getName, buildForm
    б. getParent return 'field'
    с. getName return 'daterange'
    д. 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 }
  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 сказал, отметьте настройку формы.

Ответ 2

Чтобы сделать это, вам нужно добавить следующие строки в 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.

Ответ 3

В официальной кулинарной книге есть хорошая запись в создании пользовательской поля типа