我正在使用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数据库。
答案 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']));
}
等等..