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