如何使用hasMany编辑表单(多行)

时间:2012-03-09 18:25:27

标签: forms cakephp-2.0 has-many

我有一个单位,其中有很多图片,我正在尝试在我的编辑页面上显示这些图像的编辑表单。我生成的html表单输入显示错误的模型,因此不会填充此数据的正确值。这是我的观看代码:

<?php


echo $this->Form->create('Unit', array(
    'action' => 'edit',
    'inputDefaults' => array(
        'label' => false,
        'div' => false
        )
    )
);
echo $this->Form->hidden('id');

foreach($this->data['Image'] as $img) {

echo $this->Form->hidden('Image'.$img['id'].'id');

}
echo $this->Form->end('Update Photo');?>
<?php echo $this->Session->flash(); ?>

我的HTML最终会像这样:

<form action="/units/edit/3" id="UnitEditForm" method="post" accept-charset="utf-8">
    <div style="display:none;">
       <input type="hidden" name="_method" value="POST"/>
    </div>
    <input type="hidden" name="data[Unit][id]" value="3" id="UnitId"/>
    <input type="hidden" name="data[Unit][Image1id]" id="UnitImage1id"/>
    <input type="hidden" name="data[Unit][Image2id]" id="UnitImage2id"/>
    <input type="hidden" name="data[Unit][Image3id]" id="UnitImage3id"/>
    <input type="hidden" name="data[Unit][Image4id]" id="UnitImage4id"/>
    <input type="hidden" name="data[Unit][Image5id]" id="UnitImage5id"/>
    <input type="hidden" name="data[Unit][Image6id]" id="UnitImage6id"/>
   <div class="submit">
       <input  type="submit" value="Update Photo"/>
   </div>
</form>

我已经看过很多教程,包括CakePHP手册,它显示了如何输入'Modelname。[0] .field'等等,当你知道你有多少行时它们都很好,但很好什么时候在CMS中发生过?我似乎无法通过循环遍历可用图像数组中的所有记录来找到有关如何构建此表单的任何信息。 最终,我希望能够拥有隐藏的id字段,以便记录可以更新,显示实际图像(以及更改它的能力),它的alt描述(以及更改它的能力),我想另一个隐藏unit_id的字段,用于将其与此表单相关联。

更新 使用

echo $this->Form->hidden('Image.'.$img['id'].'.id');

现在有效,但正在返回:

<input type="hidden" name="data[Image][1][id]" value="2" id="Image1Id"/>
<input type="hidden" name="data[Image][2][id]" value="3" id="Image2Id"/>
<input type="hidden" name="data[Image][3][id]" value="4" id="Image3Id"/>
<input type="hidden" name="data[Image][4][id]" value="5" id="Image4Id"/>
<input type="hidden" name="data[Image][5][id]" value="6" id="Image5Id"/>
<input type="hidden" name="data[Image][6][id]" id="Image6Id"/>

我需要从[0]开始,而不是从[1]开始。而不是通过'id'获取数字,我需要获取$ img数组中的计数数字,对吗?我该怎么做?

2 个答案:

答案 0 :(得分:4)

此行最有可能导致您遇到麻烦:

    echo $this->Form->hidden('Image'.$img['id'].'id');

这将model.field构建为“Image1id”而不是Cake期望的“Image.1.id”。尝试重写它:

    echo $this->Form->hidden('Image.'.$img['id'].'.id');

答案 1 :(得分:1)

我得到了它的工作。看看下面的代码。关键是启动一个循环遍历数组中每个项目的计数器,并使用计数器的输出生成正确数量的输入。

$count=0;
foreach($this->data['Image'] as $img) {
echo $this->Form->hidden('Image.'.$count.'.id');
$count++;
}

此输出:

<input type="hidden" name="data[Unit][id]" value="3" id="UnitId"/>
<input type="hidden" name="data[Image][0][id]" value="1" id="Image0Id"/>
<input type="hidden" name="data[Image][1][id]" value="2" id="Image1Id"/>
<input type="hidden" name="data[Image][2][id]" value="3" id="Image2Id"/>
<input type="hidden" name="data[Image][3][id]" value="4" id="Image3Id"/>
<input type="hidden" name="data[Image][4][id]" value="5" id="Image4Id"/>
<input type="hidden" name="data[Image][5][id]" value="6" id="Image5Id"/>

您可以看到填充了正确的值。