Yii表格输入研究
看完Yii表单表格输入后,发现,适合做批量提交。让我们一起来看看下面的代码。参考网址为:http://www.yiiframework.com/doc/guide/1.1/zh_cn/form.table。
在上面是这么介绍的:
有时我们想通过批量模式收集用户输入。也就是说, 用户可以为多个模型实例输入信息并将它们一次性提交。 我们将此称为 表格输入(tabular input) ,因为这些输入项通常以 HTML 表格的形式呈现。
要使用表格输入,我们首先需要创建或填充一个模型实例数组,取决于我们是想插入还是更新数据。 然后我们从
$_POST变量中提取用户输入的数据并将其赋值到每个模型。和单模型输入稍有不同的一点就是: 我们要使用$_POST['ModelClass'][$i]提取输入的数据而不是使用$_POST['ModelClass']。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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 表格中显示输入项。
<div 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(); ?>
</div><!-- form -->
到这里,或多或少有点问题要问问。下面,我人解答大家的问题。
1 | $items=$this->getItemsToUpdate(); |
这一句内容如何产生?
这是唯一没有上下文联系的一个方法。下面我列出该方法内容。并给它带一个参数,以便更加用于实际。动态表单的用途,虽然很少能碰到。但在实际应用中,还是能碰到。尤其是你的原型设计员没有实际经验的设计之下。它碰到的机率大大上升。
1 2 3 4 | public function getItemsToUpdate($cid = 0) { return Model::model()->findAllByPk($cid); } |
你掌握了吗? 有什么问题,就提问吧。
