动态表单生成,配置存储在数据库中


Dynamic Form Generation with configurations stored in a database

我正在用CakePHP 2构建一个PHP应用程序。我需要一个显示表格的页面。

表单必须根据存储在数据库中的配置动态生成。

例如:

数据库内容:

{
 {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 Negotiatable)存储在数据库中,并在此基础上在运行时生成一个html表单。如果在运行时更改配置,则表单也会更改。我知道cakeHP有一个表单生成组件。

所以我的问题是,如何从存储在数据库中的配置中获取cakeHP表单生成器,然后再获取页面?

我在考虑eval()函数,但我读到它不是真正安全的,如果可能的话,我会尽量避免它。

PS:

我将使用mongodb来存储从表单中获得的数据。

表单配置存储在数据库中的方式很灵活,我想将其存储为字符串,但这是可以协商的。

我也愿意将表单的配置存储在任何数据库中,无论是RDBMS还是NoSQL数据库。

分析数据库中的配置(使用数据序列化函数,如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'])); 
}

依此类推。

AFAIK,没有简单的方法可以做到这一点。Cake的表单生成器是表单助手。你可以在这里阅读。您可能需要编写自己的解析器,但是表单助手将为您做很多工作。我建议使用JSON格式,这样您就可以轻松地在数据库中存储的字符串和PHP中的索引数组之间移动。