Как редактировать форму с помощью hasMany (несколько строк) - PullRequest
3 голосов
/ 09 марта 2012

У меня есть модуль, у которого есть много изображений, и я пытаюсь отобразить форму редактирования для этих изображений на своей странице редактирования. Полученный в результате ввод 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, в котором показано, как вы можете ввести «Имя модели. [0] .field» и т. Д., Что хорошо и хорошо, когда вы знаете, сколько у вас строк, но когда это случается в CMS? Я не могу найти какую-либо информацию о том, как создать эту форму, просматривая все записи в массиве доступных изображений. В конце концов, я хочу иметь скрытое поле идентификатора, чтобы запись могла обновляться, показывать реальное изображение (и возможность его изменять), его альтернативное описание (и возможность его изменять), и я предполагаю, что другое скрытое поле для 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"/>

Мне нужно начинать с [0], а не с [1]. Вместо того, чтобы получать число по 'id', мне нужно получить подсчитанные числа в массиве $ img, верно? Как мне это сделать?

Ответы [ 2 ]

4 голосов
/ 09 марта 2012

Эта строка, скорее всего, вызывает у вас проблемы:

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

Это создает поле модели.Image1id, а не то, что Cake ожидает в виде Image.1.id.Попробуйте переписать это так:

    echo $this->Form->hidden('Image.'.$img['id'].'.id');
1 голос
/ 12 марта 2012

Я получил это работает.Посмотрите на код ниже.Ключ запускает счетчик, который проходит через каждый элемент в массиве, и использует выходные данные счетчика для генерации правильного количества входов.

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

Вы видите, что заполнено правильное значение.

...