Maison  >  Article  >  développement back-end  >  Yii Framework Official Guide Series 20 - Utilisation des formulaires : collecte par lots des entrées de formulaire

Yii Framework Official Guide Series 20 - Utilisation des formulaires : collecte par lots des entrées de formulaire

黄舟
黄舟original
2017-02-13 09:17:481160parcourir



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(&#39;Save&#39;); ?>
<?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) !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn