2012-02-15 90 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