表形式入力の収集 ======================== ときとして、ユーザの入力をバッチモードで集めたいと思う事があります。 すなわち、ユーザは複数のモデルインスタンスの情報を入力でき、それらを一度にまとめて送信できる、という方式です。 こういった場合の入力フィールドは HTML テーブルで提供される事が多いので、ここではこれを **表形式入力** (tabular input) と呼びます。 表形式入力では、まず初めに、データを挿入するか更新するかに従って、モデルインスタンスの配列を新規に作成またはデータベースから読み出します。 次に、ユーザの入力したデータを `$_POST` 変数から収集して、各モデルへ割り当てます。 単一のモデルの場合とのわずかな違いは、入力データの収集のために、`$_POST['ModelClass']` ではなく `$_POST['ModelClass'][$i]` を用いる点です。 ~~~ [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)); } ~~~ アクションが準備できたので、HTML テーブルとして入力フィールドを表示するための `batchUpdate` ビューの作成に取り掛かる必要があります。 ~~~ [php]
| Name | Price | Count | Description |
|---|---|---|---|