我为CakePHP选择的字段名';s表单助手工作不正常,为什么?

我为CakePHP选择的字段名';s表单助手工作不正常,为什么?,php,cakephp,Php,Cakephp,我正在创建一个AJAX表单。问题是,当我尝试使用formhelper创建输入表单时,输入的名称属性在视图中没有正确重新排序。这是我的密码: $form->input('MainAttribute.'.$i.'.SubAttribute.'.$j.'.score', array('label' => '', 'options' => $scores)); 我这样创建它是因为我希望子属性位于MainAttribute内部。当我检查HTML时,表单的name属性被切掉,如下所示:

我正在创建一个AJAX表单。问题是,当我尝试使用formhelper创建输入表单时,输入的名称属性在视图中没有正确重新排序。这是我的密码:

$form->input('MainAttribute.'.$i.'.SubAttribute.'.$j.'.score', array('label' => '', 'options' => $scores));
我这样创建它是因为我希望子属性位于MainAttribute内部。当我检查HTML时,表单的name属性被切掉,如下所示:

name="data[SuperMainAttribute]"
如何将name属性指定给计划执行的属性? (例如数据[主属性][0][子属性][0][分数])

编辑:

以下是我的模型关系:

控件有许多main属性

MainAttribute有许多子属性

ctp位于控制控制器的视图中通常,几乎在您调用
FormHelper::input
的任何时候,第一个参数都将以以下格式之一出现:

  • 对于主模型,或
    hasOne
    belongsTo
    关联:
    $form->input('model.field')
  • 对于
    有许多关联:
    $form->input(“Model.{$n}.field”)
  • 对于
    hasandbelongtomany
    关联:
    $form->input(“Model.Model.{$n}.field”)
(在这些情况下,
$n
是一个迭代器(
0
1
2
3
,等等),允许您将多个记录添加到
hasMany
-和
HasandBelongTomany
-关联模型。)

您的具体情况很棘手,因为您希望保存一个
控件
记录及其所有
maintattribute
记录,以及每个
maintattribute
的所有
子属性
记录。如果控制器中没有一些数据操作,这是不可能的。我可能解决这个问题的方法如下

他认为:

echo $form->create('Control', array('action'=>'add'));

echo $form->input('Control.field_name');

$iLimit = 4;
$jLimit = 2;
for ($k=$i=0;$i<$iLimit;$i++) {

    echo $form->input("MainAttribute.{$i}.field_name");

    for ($j=0;$j<$jLimit;$j++) {
        echo $form->input("SubAttribute.{$k}.ixMainAttribute", array('type'=>'hidden','value'=>$i));
        echo $form->input("SubAttribute.{$k}.field_name");
        $k++;
    }
}

echo $form->end('Submit');

HTH.

如果您的模型配置了正确的关系,Cake将为您做到这一点。不需要指定数组维度。在控制器中不使用和pr($this->data)的情况下尝试。哇,这样我就可以执行saveAll($this->data),而不必重新组织$this->data的结构?您可以编辑您的问题以包括您定义的模型关系吗?这一点很重要,因为
Model::saveAll()
不会保存HABTM关联的模型数据。我假设main属性是与子属性模型关联的模型。David,是的,它们是关联的
function add()
{
    if (! empty($this->data)) {

        // Perform data validation separately...

        if ( $this->Control->save( $this->data['Control'], false )) {

            foreach ( $this->data['MainAttribute'] as $k => $_data ) {

                $_subAttributes = Set::extract("/SubAttribute[ixMainAttribute={$k}]", $this->data);

                $insert = array(
                    'MainAttribute' => am( $_data, array('control_id' => $this->Control->id)),
                    'SubAttribute'  => $_subAttributes
                );

                $this->Control->MainAttribute->saveAll($insert, array('validate'=>false));
            }
        }
    }
}