На мой взгляд (/View/Tests/admin_edit.ctp), я хочу отредактировать несколько строк (из другой модели), указав форму на QsetsController и действие «admin_order», а затем использовать saveMany($this->request->data)
для обновления всех изменений.
/View/Tests/admin_edit.ctp:
echo $this->Form->create( 'Qset', array('action'=>'order', 'admin'=>1));
$n = 1;
foreach ($qsets as $qset) : ?>
<h3>Question set <?php echo $n; $n++;?></h3>
<?php echo $this->Form->input('Qset.'.$n.'.order'); ?>
<?php echo $this->Form->input('Qset.'.$n.'.id', array('type'=>'hidden') ); ?>
...
$n++;
endforeach;
echo $this->Form->end('save');
/Контроллер/QsetsController.php
public function admin_order() {
$data = $this->request->data; //maybe just $this->data ?
$this->Qset->saveAll($data);
$this->Session->setFlash( "Order saved.");
$this->redirect( Controller::referer() );
}
В настоящее время мои данные не сохраняются (хотя ошибок нет). Кроме того, только первый ввод, отраженный циклом foreach, отображается с правильным значением поля order
. Каждый последующий не имеет никакой ценности.
Обновление: я изменил $n = 1
на $n = 0
, и теперь первый И второй ввод отображается с правильными значениями порядка.
update2: разметка формы начинается так:
<form action="/admin/qsets/order" id="QsetOrderForm" method="post" accept-charset="utf-8">
Разметка для полей ввода, которые отображаются правильно:
<div class="input number"><label for="Qset2Order">Order</label>
<input name="data[Qset][2][order]" type="number" value="3" id="Qset2Order">
</div>
Разметка, полученная для пустых полей ввода:
<div class="input number"><label for="Qset3Order">Order</label>
<input name="data[Qset][3][order]" type="number" id="Qset3Order">
</div>
Update3: я решил проблему с некорректным отображением входных данных! Обратите внимание, что я увеличивал $n
перед повторением входных данных, так что это создавало дубликаты в конце цикла. Я переместил $n++
после входных данных, и теперь они отображаются правильно. Фу. Теперь мне просто нужно заставить их сохраниться.
Полезные ссылки:
глава книги тортов о saveMany() /saveAll()
Похожий вопрос а>