Symfony настраиваемый виджет fom: как автоматически добавлять атрибуты в определенное c поле формы (а не на весь виджет)? - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь создать собственный виджет формы Symfony на основе некоторых элементов управления jQueryUI. Виджет формы должен представлять настраиваемый класс с двумя свойствами и, таким образом, должен содержать два элемента управления вводом. Как я могу добавить атрибуты к этим элементам управления вводом?


Подробности:

Предположим, следующий настраиваемый класс должен быть представлен пользовательский виджет:

class Room {
    public $building = "main";
    public $roomNo = 1;
}

class Lecture {
    public $date;
    public $room;
}

class LectureType extends AbstractType {
    ...
    public function buildForm(FormBuilderInterface $builder, array $options) {
        $builder
            ->add('date', DateType::class, [...])            
            ->add('room', RoomType::class, [...])   // Using custom RoomType
        ;
    }
}  

class RoomType extends AbstractType {
    ...
    public function buildForm(FormBuilderInterface $builder, array $options) {
        $builder
            ->add('building', ChoiceType::class, [...])            
            ->add('roomNo', IntegerType::class, [...])   
        ;
    }
}

// room_widget.html.twig
{% block app_room_widget %}

{# Adding the attributes for the widget container or the complete widget is easy #}
{# using either the widget_container_attributes or widget_attributes block. But  #}
{# how to add the attributes to the specific fields?                             #}

<div {{ block('widget_container_attributes') }} ">  
    ...
    <input {{ block('how_to_add_attributes_here?') }} />

    <input id="{{ form.building.vars.id }}" name="{{ form.value.building.full_name }}"{% if disabled %} disabled="disabled"{% endif %}{% if required %} required="required"{% endif %}{% if form.building.vars.value is not empty %} value="{{ form.building.vars.value }}"{% endif %}/>

    <script>
       // configure jQueryUI controls...
    </script>
</div>
{% endblock %}

Добавить атрибуты к полному виджету легко, но как добавить атрибуты в специальное поле c, не выполняя все вручную?

...