Сохранение форм Zend Framework в базе данных

Я создаю генератор / конструктор форм для Zend Framework. Это для клиента, и поскольку клиент хочет создавать формы, не вдаваясь в код, мне нужен интерфейс перетаскивания. Пользователь должен иметь возможность перетаскивать предопределенные элементы формы в контейнер для создания формы. Это простая часть, которую я почти решил сам. Более сложная часть, и вопрос заключается в сохранении этой формы. Я хочу сохранить эту форму в базе данных MySQL. Как я могу подойти к этому?

Я думал о:

  • Сохранение элементов в базе данных
  • Сохранение формы в базу данных, включая идентификатор элемента
  • расширение класса Zend_Form, чтобы при запросе формы она загружала все элементы и создавала необходимый PHP-код, чтобы его можно было визуализировать, а также заполнить, если это необходимо для редактирования.

Есть ли у кого-нибудь лучшее предложение, или это путь?

Любое мнение приветствуется!


person Janis Peisenieks    schedule 28.10.2010    source источник


Ответы (3)


Некоторое время назад я пытался сделать то же самое.

Похоже, что лучший вариант - сохранить Zend Forms в формате Zend_Config (ini или xml, который проще обрабатывать с помощью JavaScript).

Но генератор особо и не нужен. Я только что создал в своей среде IDE ярлыки (для элементов формы, валидаторов и т. Д.), Поэтому я могу легко расширить abstract My_Form.

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

person takeshin    schedule 28.10.2010
comment
Спасибо за ввод, но как сохранить что-то в ini-файл и получить его? Просто используя fwrite, используя определенную схему именования, а затем извлекая ее? Что касается генератора, то главный вопрос я редактировал. - person Janis Peisenieks; 28.10.2010
comment
@Janis Есть писатели, например Zend_Config_Writer_Ini или Zend_Config_Writer_Xml - person takeshin; 29.10.2010
comment
Я выбрал этот ответ как лучший, поскольку он обеспечивает максимальную гибкость. Это позволяет мне использовать Zend_From, а также реализовать мои собственные методы проверки и методы рендеринга с помощью jQuery. - person Janis Peisenieks; 02.11.2010

Мне приходилось проделывать это несколько раз ... и это довольно просто.

  1. Храните необходимую информацию: метку, имя поля, тип, параметры и т. Д. (Вы можете поработать с валидаторами / фильтрами, если хотите) для каждого поля.

  2. Динамически генерируйте форму, перебирая поля, хранящиеся в базе данных, используя тип / параметры для создания каждого элемента.

person Adrian Schneider    schedule 28.10.2010
comment
Спасибо за вклад. Это был оригинальный способ, которым я собирался это сделать. Теперь есть 3 возможных сценария. Ох ... что делать, что делать ... :) - person Janis Peisenieks; 29.10.2010

Большинство классов в ZF можно сериализовать, поэтому, если ваша система уже заботится о создании элементов формы, вероятно, у вас есть объект Zend_Form.

Просто сериализуйте () его и сохраните в виде поля типа text или mediumtext. Когда вы загрузите его обратно, просто unserialize (), и вы получите функциональный объект Zend_Form.

person simonrjones    schedule 28.10.2010
comment
Хорошо, все это кеширование и сериализация классов для меня в новинку. Итак, могу ли я просто использовать это так: $ var = unserialize ($ serialized_class); $ var- ›render (); ? для примера? - person Janis Peisenieks; 29.10.2010
comment
В PHP можно сериализовать большинство переменных, кроме ресурсов, таких как открытое соединение с базой данных или файл. Если вы сохраняете сериализованную версию своей формы в базе данных, вы сможете снова разбудить ее (десериализовать), как только загрузите ее из базы данных. Просто вызовите unserialize () для текстовой строки и проверьте, является ли это допустимым классом Zend_Form. Если это так, вы можете использовать его как обычный класс Zend_Form и просто отобразить его в своем представлении для его рендеринга. Имейте в виду, что текстовая строка может быть довольно длинной, я тестировал ее минуту назад с формой с 9 элементами, а сериализованная строка была 3 - person simonrjones; 31.10.2010
comment
Было несколько проблем с добавлением комментария, извините за это. В конце этого сообщения должно быть указано, что сериализованная форма формы с 9 элементами (т.е.полями формы) имеет длину 34000 символов. - person simonrjones; 31.10.2010