Как я могу сделать пользовательский тип поля в symfony2? - PullRequest
21 голосов
/ 28 июня 2011

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

Ответы [ 3 ]

23 голосов
/ 11 августа 2011

Потому что мне не нравится шаблонный движок веток, этот пример только для PHP-шаблонов

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

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

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

Создайте новый виджет для него в 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, проверьте настройка формы .

6 голосов
/ 07 июля 2011

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

2 голосов
/ 16 августа 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...