Создание уникальных полей формы на основе запроса к базе данных в Symfony 1.4/Doctrine 1.2

У меня на работе происходит этот дикий проект, и мы используем Symfony 1.4, поэтому я надеялся, в идеале, сохранить этот проект в пределах возможностей фреймворка, насколько это возможно. К сожалению, несмотря на довольно много исследований и поисков, я так и не нашел способа генерировать элементы sfWidgetForm на основе запросов к базе данных.

Я объясню, какова цель этого, объясняя ход проекта.

  1. Пользователь отправляет форму, которая содержит большую часть данных, необходимых нашим рекламодателям.
  2. На основе этих данных можно вызывать строки из базы данных. Возможно, эта форма была заполнена, и в ней пользователь утверждает, что интересуется садоводством. На основе этой релевантности это даст строку (или несколько строк, но что угодно) полей формы, связанных с садоводством.
  3. Здесь находится важная часть. Этот контент, связанный с садоводством, по сути представляет собой схему полей формы, необходимых для заполнения заявки для тех, кто интересуется садоводством. Мы получим типы элементов формы, имена, метки, статус требования, статус включения и т. д. На основе идентификаторов этих элементов мы можем увидеть, зависят ли какие-либо из них друг от друга из другой таблицы. Если это так, они обрабатываются с помощью javascript. Это другая история.
  4. На данный момент я могу либо создавать формы, используя пользовательские компоненты в Symfony (что было бы хорошо). Они будут выводить формы, которые работают нормально, но они не будут поддерживаться виджетами sfValidator, а это печально. Что я хотел бы сделать, так это каким-то образом сообщить какому-нибудь волшебному классу формы построить форму на основе критерия X, виджетов и валидаторов.
  5. После того, как форма заполнена и выведена, пользователь заполняет оставшиеся поля, вторая форма проверяется, и весь набор данных из обеих форм отправляется рекламодателю.

Меня больше всего здесь интересуют данные о динамическом создании форм в Symfony. Я могу легко построить, используя компонент, но я действительно не хочу. Тем более, что я планирую скоро уйти, а сохранить что-то в рамках было бы идеально для моих товарищей по команде.

Спасибо за любые идеи! Это довольно увлекательный проект, несмотря на то, что он скучен снаружи — я никогда раньше не создавал формы динамически, не говоря уже о Symfony. Должно быть круто.


person Steve Adams    schedule 30.09.2011    source источник


Ответы (2)


Конечно, вы можете создавать списки выбора/переключатели/флажки на основе запроса – я не уверен, что это именно то, что вы хотите сделать?

См. http://www.symfony-project.org/api/1_4/sfWidgetFormDoctrineChoice и параметр query — я его часто использую, и он отлично работает.

Динамическое построение всей формы будет сложным ИМО - я думаю, вам нужно определить хотя бы некоторые правила, чтобы вы могли отображать/скрывать определенные элементы формы.

person Manse    schedule 10.10.2011
comment
Я вставил то, что сделал, здесь: pastebin.com/NrJeADAk. Если у вас есть какие-либо идеи по улучшению или просто интересно, посмотрите! Это работает хорошо, но... Учитывая, что это странная вещь, решения для обработки вывода также, мягко говоря, странные. Это был странный проект. Что бы это ни стоило, Symfony 2 имеет встроенное решение для этого, и оно выглядит великолепно. Я не могу дождаться, чтобы перенести этот проект на это. - person Steve Adams; 11.10.2011

Рабочий пример того, как я решил эту проблему, можно найти здесь: http://pastebin.com/NrJeADAk

Это работает хорошо. Если ваша база данных правильно и последовательно описывает ваши формы, вы даже можете создавать новые формы, отправляя их описания через форму. Я сделал это для своей команды на работе, и с очень серьезной проверкой полей, до сих пор им не удалось создать ни одной формы, которая вызывает проблемы. Я частый пользователь SO, поэтому, если вы наткнетесь на это и захотите узнать больше, не стесняйтесь писать мне.

person Steve Adams    schedule 25.10.2011