使用存储在数据库中的配置生成动态表单

时间:2012-02-22 01:48:24

标签: php forms cakephp

我正在使用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 Negotiable )存储在数据库中,并且基于在运行时生成html表单。如果在运行时更改配置,则表单也会更改。 我知道cakePHP有一个表单生成组件。

所以我的问题是如何实际从存储在数据库中的配置到cakePHP表单生成器再到页面?

我正在考虑eval()功能,但我读到它并不是真的安全,我想尽可能避免它。

PS:

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

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

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

2 个答案:

答案 0 :(得分:2)

AFAIK,没有简单的方法可以做到这一点。 Cake的表单生成器是表单助手。你可以阅读它here。您可能必须编写自己的解析器,但表单帮助程序将为您做很多事情。我建议使用JSON format,以便您可以轻松地在数据库中存储的字符串和PHP中的索引数组之间移动。

答案 1 :(得分:2)

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

等等..