Symfony 1.4 Form Creater - PullRequest
       7

Symfony 1.4 Form Creater

1 голос
/ 19 августа 2011

Потребность: способность динамически создавать формы

Структура (простая идея, а не фактическая структура)

Admin: Form Assignment, where you create what field you want your new Form to have
FrontEnd: Where the New form will be implemented (this is the root of this question)
FronEnd Storage: When the New form is filled out the data points are written to a set of tables  

Идея достаточно проста, зайдите в Admin, выберите поля, fieldType и метки, которые вы хотите

т.е.

Field Name:*Enter a specific field name, like f_name or email  
FieldType: [Text, TextArea, Password, Radio, DatePicker, CheckBox, Select, etc]  
Label: What to display on the resulting form, f_name = First Name, etc  

Затем я нажимаю на страницу во FrontEnd, где создается новая форма, заполняю ее и вуаля, данные сохраняются в таблицах хранилища FrontEnd.

Итак, вопрос в том, что идея заключается в том, как этого добиться, у меня уже есть раздел Admin, он динамически создает и соответствующим образом привязывает frontEnd. Из этого я хотел бы получить совет.

В настоящее время моя идея состоит в том, чтобы просто создать форму оболочки, которая представляет собой огромный уродливый оператор switch, который создает элементы sfForm и соответствующие валидаторы для каждого поля (поля, полученные из того, что было введено в области администрирования)

Я чувствую, что это «неправильный» способ сделать это, я нашел плагин spyFormBuilderInterface2Plugin, который старый и собран для propel, а не для доктрины, но это основная идея того, что мне нужно. Так как бы вы это сделали?

Обратите внимание, что я не ищу динамически ДОБАВИТЬ формы в текущую форму, я уже могу это сделать, и это именно то, что реализовано в моем разделе администратора, мне нужно взять данные для создания целой НОВОЙ формы программно

1 Ответ

1 голос
/ 19 августа 2011

Я создал нечто, как вы описали, так, как вы сказали.

У меня есть модель FormDefinition, которая определяет форму и имеет коллекцию FormField с. Каждое поле формы имеет widget_class, widget_options, validator_class и validator_options.

У меня есть пользовательский myForm, которому нужен FormDefinition в своем конструкторе. В setup() из myForm я перебираю все поля для создания экземпляров виджетов и валидаторов.

Поскольку в нашем решении нам было необходимо / нужно хранить все данные формы в отдельных таблицах. Мой myForm начинается с sfDoctrineForm, а в моем бэкэнде есть некоторая логика, которая создает / обновляет (php) модель и определение базы данных, просто вызывая соответствующие методы Doctrine. Но вы также можете создать магазин EAV.

...