【问题标题】:cakephp : dynamic form fieldscakephp : 动态表单域
【发布时间】:2012-03-06 11:05:58
【问题描述】:

我有一个表单,其中包含从数据库表“FieldNames”中动态提取的所有字段:

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

这只是一个例子,形式比较复杂。

我在 php doc 中了解到并看到,如果表单字段与模型表 1:1 匹配,则 Save 方法是用户,并使用正确单元格中的所有值创建新行。 但是,如果对于我的示例表单,所有字段值都应该在多行中,一一出现在具有以下结构的表“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)。字段名称和编号各不相同。这就是我将它们拉入数据库的原因。

【问题讨论】:

    标签: forms cakephp dynamic field names


    【解决方案1】:

    我建议您在模型中创建一个方法(要保存字段的位置),例如:

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

    您可以在 FieldsController 添加操作中调用此函数:

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

    或在任何其他控制器/模型中使用 ClassRegistry:

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

    确保您的数据格式正确,例如:

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

    【讨论】:

    • 谢谢,我会试试这个想法。
    猜你喜欢
    • 2018-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    • 2012-11-12
    相关资源
    最近更新 更多