На мой взгляд (/View/Tests/admin_edit.ctp) Я хочу отредактировать несколько строк (из другой модели), указав форму на QsetsController и затем выполните действие «admin_order», затем нажмите saveMany($this->request->data)
, чтобы обновить все изменения.CakePHP: Помощник формы с saveMany() для редактирования нескольких строк сразу
/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');
/Controller/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
. Каждый последующий не имеет никакой ценности.
Update: Я изменил $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++
после ввода, и теперь они отображаются правильно. Уф. Теперь мне просто нужно заставить их сэкономить.
Полезные ссылки:
Cake book chapter on saveMany()/saveAll()
Similar question
ОК. Я попробую в контроллере. Любая идея, почему хелпер формы не создает все входы правильно? – emersonthis
Форма по-прежнему не работает после этой модификации, но может быть просто потому, что представление не отправляет данные должным образом. Ясно, что что-то неверно, потому что только некоторые из полей ввода заполняются правильными значениями. – emersonthis
Ну, вы только показали код, как вы заполняете '$ this-> request-> data' для представления admin_edit. Как будет зависеть ваш вклад, это будет зависеть от этого. – ADmad