Обработка табличного ввода ========================== Иногда нам может потребоваться обрабатывать данные, вводимые пользователем, в пакетном режиме. Иначе говоря, случаются ситуации, когда пользователь вводит данные для множества экземпляров модели и отправляет их на сервер все разом. Будем называть это табличным вводом (tabular input), поскольку поля ввода, как правило, организованы в виде таблицы. Для работы с табличным вводом нам, в первую очередь, понадобится создать или заполнить массив, состоящий из экземпляров модели данных, в зависимости от того, добавляем мы данные или обновляем. Затем мы извлекаем данные из переменной `$_POST` и присваиваем их каждой модели. В отличие от ввода данных для одной модели, здесь для присваивания значений атрибутам мы будем использовать `$_POST['ModelClass'][$i]` вместо `$_POST['ModelClass']`. ~~~ [php] public function actionBatchUpdate() { // извлекаем элементы, которые будем обновлять в пакетном режиме, // предполагая, что каждый элемент является экземпляром класса модели 'Item' $items=$this->getItemsToUpdate(); if(isset($_POST['Item'])) { $valid=true; foreach($items as $i=>$item) { if(isset($_POST['Item'][$i])) $item->attributes=$_POST['Item'][$i]; $valid=$item->validate() && $valid; } if($valid) // все элементы корректны // …некоторая обработка } // отображаем представление с формой для ввода табличных данных $this->render('batchUpdate',array('items'=>$items)); } ~~~ Когда действие готово, необходимо создать представление `batchUpdate` таким образом, чтобы отобразить все необходимые поля ввода в HTML таблице: ~~~ [php]
| Имя | Стоимость | Количество | Описание |
|---|---|---|---|