Я хочу создать пользовательское поле формы в symfony2 с именем daterange
, которое расширит поле формы типа даты по умолчанию Symfony и примет диапазон дат (дата начала и дата окончания) в два разных текстовых поля.
Как создать собственный тип поля в symfony2?
Ответ 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 }
-
Создайте новый виджет для него в
TestBundle/Resources/views/Form/daterange_widget.html.php
вы можете взять виджет даты в качестве примера.Src/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/Resources/views/Form/date_widget.html.php
-
Добавить в 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
В официальной кулинарной книге есть хорошая запись в создании пользовательской поля типа