2012-02-15 157 views
0

我剛開始使用CakePHP和我這樣裸:) ...CakePHP的:動態表單域

我有了所有的字段拉從數據庫中動態表「字段名」的一種形式:

ID | FieldName 
-------------- 
11 | username 
22 | password 
33 | Address 
44 | etc 

這只是一個例子,表單比較複雜。

我已經在php文檔中瞭解到並看到如果表單字段與模型表1:1匹配,則Save方法是用戶,並且將使用正確的cels中的所有值創建一個新行。 但是它是如何工作的,如果對於我的示例表單,所有字段值都應該在多行中獲得,並在具有以下結構的表「FieldValues」中逐個顯示。

ID | FieldId | Value    | DataSet 
--------------------------------------------- 
1 | 11  | 'value for username' | 1 
2 | 22  | 'value for password' | 1 
3 | 33  | 'value for address' | 1 

FieldId = FK到Fieldnames.ID

我能夠用「經典」

foreach field -> $sql = "sql insert query" -> $this->query($sql)' 

我只是想知道是我可以利用「魔術做到這一點的方法「用蛋糕來解決這個任務。 第二個問題:如果「魔術」是可能的,我如何添加第二個參數並在每個數據集上設置新的DataSet值?

感謝, 弗拉德

附:這是一個表單生成器應用程序,所以字段必須是動態的,我不能使用「靜態」表單實現(硬編碼表格列1:1中的字段名稱)。字段名稱和編號不同,「我爲什麼要將它們拉到數據庫中。

回答

1

我建議你創建你的模型(您想保存您的領域)等的方法:

// FieldsController 
$this->Field->saveFields($this->request->data); 

// Field model 
public function saveFields($data) { 
    foreach($data as $field) { 
     $this->save($field); 
    } 
} 

您可以在FieldsController添加操作調用此函數或者在任何其他控制器/型號中使用ClassRegistry:

// FooController 
$Field = ClassRegistry::init('Field'); 
$Field->saveFields($this->request->data); 

請確保您的數據格式如下:

$data [0] [ ModelName ] = array(
    Field1 => Value1, 
    Field2 => Value2 
) 
+0

謝謝,我會試試這個想法。 – 2012-02-16 17:25:02