2013-04-21 1 views
1

На мой взгляд (/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

ответ

3

Вы обратитесь к руководству, но, вероятно, не читали его достаточно хорошо :)

Цитируя секции для saveMany():

Примечание что мы передаем числовые индексы вместо обычных $ данных , содержащих статью ключ. При сохранении нескольких записей одной и той же модели массивы записей должны быть численно проиндексированы без ключа модели .

Таким образом, вместо $data проход $data['Qset'] в SaveAll()/saveMany().

Также Controller::referer() не является статическим методом использования $this->referer()

+0

ОК. Я попробую в контроллере. Любая идея, почему хелпер формы не создает все входы правильно? – emersonthis

+0

Форма по-прежнему не работает после этой модификации, но может быть просто потому, что представление не отправляет данные должным образом. Ясно, что что-то неверно, потому что только некоторые из полей ввода заполняются правильными значениями. – emersonthis

+0

Ну, вы только показали код, как вы заполняете '$ this-> request-> data' для представления admin_edit. Как будет зависеть ваш вклад, это будет зависеть от этого. – ADmad