バッチモードを通じてユーザー入力を収集したい場合があります。つまり、ユーザーは複数のモデル インスタンスの情報を入力し、それらをすべて一度に送信できます。 これらの入力は通常 HTML テーブルとして表示されるため、これを 表形式入力 と呼びます。
テーブル入力を使用するには、データを挿入するか更新するかに応じて、まずモデル インスタンスの配列を作成または設定する必要があります。 次に、ユーザーが入力したデータを $_POST
変数から抽出し、各モデルに割り当てます。単一モデル入力とのわずかな違いは、入力データを抽出するには、$_POST['ModelClass']$_POST['ModelClass'][$i]
を使用する必要があることです。 /コード>。 $_POST
变量中提取用户输入的数据并将其赋值到每个模型。和单模型输入稍有不同的一点就是: 我们要使用 $_POST['ModelClass'][$i]
提取输入的数据而不是使用 $_POST['ModelClass']
。
public function actionBatchUpdate() { // 假设每一项(item)是一个 '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=$valid && $item->validate(); } if($valid) // 如果所有项目有效 // ...则在此处做一些操作 } // 显示视图收集表格输入 $this->render('batchUpdate',array('items'=>$items)); }
准备好了这个动作,我们需要继续 batchUpdate
视图的工作以在一个 HTML 表格中显示输入项。
<p class="form"> <?php echo CHtml::beginForm(); ?> <table> <tr><th>Name</th><th>Price</th><th>Count</th><th>Description</th></tr> <?php foreach($items as $i=>$item): ?> <tr> <td><?php echo CHtml::activeTextField($item,"[$i]name"); ?></td> <td><?php echo CHtml::activeTextField($item,"[$i]price"); ?></td> <td><?php echo CHtml::activeTextField($item,"[$i]count"); ?></td> <td><?php echo CHtml::activeTextArea($item,"[$i]description"); ?></td> </tr> <?php endforeach; ?> </table> <?php echo CHtml::submitButton('Save'); ?> <?php echo CHtml::endForm(); ?> </p><!-- form -->
注意,在上面的代码中我们使用了 "[$i]name"
而不是 "name"
batchUpdate
ビューで作業を続けて、入力項目を HTML テーブルに表示する必要があります。 🎜🎜🎜🎜🎜🎜rrreee🎜🎜🎜上記のコードでは、CHtml への呼び出しとして "name"
の代わりに "[$i]name"
を使用していることに注意してください。 :activeTextField 2 番目のパラメータ。 🎜🎜検証エラーがある場合、前に説明した単一モデル入力と同様に、対応する入力項目が自動的に強調表示されます。 🎜🎜上記は、Yii Framework 公式ガイド シリーズ 20 - フォームの使用: フォームに入力されたコンテンツのバッチ収集です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。 🎜