2012-03-09 15 views
3

私は画像が多いユニットを持っており、編集ページにこれらの画像の編集フォームを表示しようとしています。結果のhtmlフォームの入力は間違ったモデルを示しているため、このデータの正しい値には値が設定されません。ここに私のビューのコードは次のとおりです。hasMany(複数行)でフォームを編集する方法

<?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は次のように終わる:。私はあなたが」MODELNAMEを入力する方法を示し、CakePHPのマニュアルを含むチュートリアルの数を、見てきました

<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> 

[0 ] .field 'など、あなたが持っている行の数が分かっていれば、すべて上質でいいですが、いつCMSでそれが起こりますか?私は利用可能なイメージの配列のすべてのレコードをループすることによってこのフォームを構築する方法に関する情報を見つけることができないようです。 最終的には、レコードを更新したり、実際のイメージを表示したり、変更することができるように、隠しidフィールドを持つことができるようにしたいと考えています。このフォームに関連付けるunit_idの非表示フィールドです。

UPDATE

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"/> 

を私は[1]、[0]から起動する必要はありません。 'id'で数値を取得する代わりに、$ img配列でカウントされた数値を取得する必要があります。これはどうすればいいですか?

答えて

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"/> 

あなたは正しい値が人口であることがわかります。

+0

ねえ、私は同じ考え方(カウント)と入力が正しい値とすべてを持っていた。しかし、私はデータを保存することはできません。コントローラの一部を表示できますか?私は記事を取得し、patchEntityに関連付けられているものを使用しています。 – Isengo

4

ここでこのラインは、最も可能性の高いあなたのトラブルを引き起こしている:

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

は、これは「Image1id」ではなくケーキが期待するものよりも「Image.1.id」としてmodel.fieldを構築します。

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

これは機能します!残念ながら、$ img []は[0]ではなく[1]で値STARTINGを返していますので、私のループが最後のImage.idに到達するまでに、値は表示されません(そのレコードはアレイ)。参照のためにOPを更新する。 – huzzah

関連する問題