Symfony2 построитель форм JavaScript манипулирование данными / структурой формы - PullRequest
0 голосов
/ 14 октября 2011

Некоторое время назад я боролся с проблемой динамических форм, которые меняются в зависимости от предыдущего ввода.Это мой первый проект Symfony, поэтому я все еще изучаю, как все работает вместе.

У меня есть тип формы для выбора периодов времени.Есть предустановленные периоды (например, 1 мин, 5 мин, 30 мин, 1 час и т. Д.) И настраиваемое текстовое поле для ввода определенного количества секунд.Эта форма может быть встроена в другие формы, поэтому (afaik) не имеет стандартного идентификатора, к которому можно получить доступ.Я хотел бы, чтобы текстовое поле пользовательского времени было видимым, только если в списке предустановленного времени выбрано «Пользовательское время» (пустое значение).

Альтернативно, предустановленные значения могут просто записывать значение в секундах впользовательское значение (и при изменении пользовательского текстового поля потребуется изменить поле предустановки на пользовательское).Это также было бы приемлемо.

Если бы конструктор форм не использовался, это был бы тривиальный JavaScript, но вместо того, чтобы что-то взламывать, я бы предпочел сделать это правильно в повторно используемом коде, чтобы я зналбудущее.На мой взгляд, если бы был способ указать пользовательский шаблон визуализации формы в самом типе формы, который применяется только к этой форме, это было бы фантастическим.

Пальцы скрещены, что есть хорошее решение для этого!

Отредактировано: Кроме того, я использую Twig для рендеринга всех моих видов.

1 Ответ

1 голос
/ 17 октября 2011

Результаты небольшого исследования показали, что лучший способ сделать это - добавить переопределения полей для виджета:

/ SRC / ПОЛ / DataBundle / Ресурсы / просмотров / Форма / fields.html.twig:

{% block periodChoose_widget %}
    <script type="text/javascript" src="{{ asset('bundles/databundle/js/periodChoose.js') }}"></script>
    {{ block('form_widget') }}
{% block %}

Затем добавьте следующее к каждому из файлов конфигурации приложения / пакета:

/ приложение / Config / config.yml:

imports:
    data_bundle:
        resource: @PWTDataBundle/Resources/config/config.yml

/ SRC / ПОЛ / DataBundle / Ресурсы / конфигурации / config.yml:

# Twig Configuration
twig:
    form:
        resources:
            - 'PWTDataBundle:Form:fields.html.twig'

Я понял, что мне нужно будет что-то добавить в глобальную конфигурацию приложения, если я захочу повторно использовать форму в нескольких пакетах. Это позволяет пакету быть достаточно автономным, имея лишь небольшую ссылку в общей конфигурации приложения. Javascript не включается до тех пор, пока форма не будет использована, и блок веток имеет очень мало накладных расходов по сравнению с другими решениями (afaik).

Таким образом, javascript, который идет с формой, включается всякий раз, когда он используется, и для его изменения требуется только модификация пакета, а не что-либо в общей конфигурации / представлениях приложения. Это также разбивает представления так, что у них нет длинного списка, расширяет это, расширяет это (как должно было бы применяться, если у вас был стиль пакета, который добавил тег formTheme для переопределения в базовом шаблоне пакета).

Некоторые из этих двух последних абзацев - это спекуляция, и может быть гораздо лучший способ сделать это, но я вполне могу двигаться дальше. Если у кого-то есть лучшее решение, я буду рад прочитать об этом.

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