2012-02-22 85 views
1

我在用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"} 
} 

我想这样的一些配置(格式元)存储在数据库中,并基于该HTML表单将在生成运行。如果配置在运行时更改,表单也会更改。 我知道cakePHP有一个表单生成组件。

所以我的问题是,我怎样才能从一个存储在数据库中的配置文件到cakePHP表单生成器,然后到页面?

我正在考虑eval()函数,但是我读了它并不是很安全,我试图尽可能地避免它。

PS:

我将使用mongodb用于存储从所述表格获得的数据。

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

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

回答

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'])); 
} 

等等形式..

+1

+1为此,虽然我不认为你需要''serialize()'任何东西,只需在你的控制器中使用'$ this-> set()'与所有表单字段配置,并显示使用JavaScript的有意义的内容你的看法(如果需要显示的字段在用户看到页面时发生变化)或者你可以在t中做一些条件逻辑他查看并显示propper字段... 无论如何,我看到你的问题的方式,它不是严格的2.0相关的,所以你可以看看1.3的答案以及 – Bogdan 2012-02-22 02:09:47

+1

@Bogdan序列化配置数组与数据库而不是拿出他自己的格式和配对解析器:) – 2012-02-22 02:10:50

+0

哦,:) :)是啊,当然,这是有道理的,显然:) – Bogdan 2012-02-22 02:12:45

2

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