CakePHP的:动态表单域
问题描述:
我刚开始使用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中的字段名称)。字段名称和编号不同,“我为什么要将它们拉到数据库中。
答
我建议你创建你的模型(您想保存您的领域)等的方法:
// 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
)
谢谢,我会试试这个想法。 – 2012-02-16 17:25:02