Динамическое Формирование Формы с конфигурациями, сохраненными в базе данных - PullRequest
1 голос
/ 22 февраля 2012

Я создаю PHP-приложение с CakePHP 2.Мне нужно иметь страницу, где отображается форма.

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

Например:

Содержимое базы данных:

{
 {name:"Username",type:"text",label:"Username",validation:("required","minlength:6")},
 {name:"Password",type:"password",label:"Password",validation:("required","minlength:6")},
 {name:"Submit",type:"submit",value:"submit"}
}

Я хочунекоторые конфигурации, подобные этой ( Format Negotiable ), хранятся в базе данных и основаны на том, что HTML-форма будет сгенерирована во время выполнения.Если конфигурация изменяется во время выполнения, форма также изменится.Я понимаю, что в cakePHP есть компонент генерации форм.

Так что мой вопрос: как мне на самом деле получить данные из конфигурации, хранящейся в базе данных, в генератор форм cakePHP и затем на страницу?

Я былучитывая функцию eval(), но я прочитал, что она не была действительно безопасной, и я стараюсь избегать ее, если это возможно.

PS:

Я буду использовать mongodb для храненияданные, полученные из формы.

Способ, которым конфигурация формы хранится в базе данных, является гибким, я думаю сохранить его как строку, но это можно обсудить.

Я такжеоткрыт для хранения конфигурации формы в любой базе данных, будь то СУБД или база данных NoSQL.

Ответы [ 2 ]

2 голосов
/ 22 февраля 2012

Анализ конфигурации из базы данных (используйте функцию сериализации данных, такую ​​как serialize(), json_encode() или сериализатор xml ... как угодно) и создайте форму, используя http://book.cakephp.org/2.0/en/core-libraries/helpers/form.html

// Psuedo-code
$fields = array(
  'fields' => array(
    'name' => 'username',
    'type' => 'text',
    'label' => 'Username',
    'validation' => array('...validation config...'),
  )
);

foreach($fields as $formOptions) {
  echo $this->Form->input($formOptions['name'], array('label' => $formOptions['label'])); 
}

И так далее.

2 голосов
/ 22 февраля 2012

AFAIK, нет простого способа сделать это.Генератор форм Cake - это помощник по формам.Вы можете прочитать об этом здесь .Вам, вероятно, придется написать свой собственный анализатор, но помощник по формам многое сделает для вас.Я бы предложил использовать формат JSON , чтобы вы могли легко перемещаться между строками, хранящимися в базе данных, и индексированными массивами в PHP.

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