Parfois, nous souhaitons collecter les entrées des utilisateurs via le mode batch. Autrement dit, les utilisateurs peuvent saisir des informations pour plusieurs instances de modèle et les soumettre toutes en même temps. Nous appelons cela entrée tabulaire car ces entrées sont généralement présentées sous forme de tableaux HTML.
Pour utiliser la saisie sous table, nous devons d'abord créer ou remplir un tableau d'instances de modèle, selon que nous souhaitons insérer ou mettre à jour des données. Nous extrayons ensuite les données saisies par l'utilisateur de la variable $_POST
et les attribuons à chaque modèle. La légère différence par rapport à l'entrée d'un modèle unique est que nous devons utiliser $_POST['ModelClass'][$i]
pour extraire les données d'entrée au lieu d'utiliser $_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)); }
Cette action étant prête, nous devons continuer à travailler sur la vue batchUpdate
dans un tableau HTML Les éléments d'entrée sont affichés.
<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 -->
Notez que dans le code ci-dessus, nous utilisons "[$i]name"
au lieu de "name"
comme appel The deuxième paramètre de CHtml::activeTextField.
S'il y a des erreurs de validation, l'entrée correspondante sera automatiquement mise en évidence, tout comme l'entrée de modèle unique que nous avons expliquée plus tôt.
Ce qui précède est la série 20 de guides officiels du Yii Framework - Utilisation des formulaires : collecte par lots du contenu saisi dans le formulaire. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !