2012-02-22 88 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中的索引數組之間移動。

相關問題