首頁  >  文章  >  後端開發  >  Yii框架官方指南系列20-使用表單:大量收集表格輸入

Yii框架官方指南系列20-使用表單:大量收集表格輸入

黄舟
黄舟原創
2017-02-13 09:17:481105瀏覽



有時我們想透過批次模式收集使用者輸入。也就是說, 使用者可以為多個模型實例輸入資訊並將它們一次提交。 我們將此稱為 表格輸入(tabular input) ,因為這些輸入項目通常以 HTML 表格的形式呈現。

要使用表格輸入,我們首先需要建立或填入一個模型實例數組,取決於我們是想插入還是更新資料。 然後我們從 $_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(&#39;Save&#39;); ?>
<?php echo CHtml::endForm(); ?>
</p><!-- form -->

注意,在上面的程式碼中我們使用了 "[$i]name" 而不是 "::CH

如果有任何驗證錯誤,對應的輸入項目將會自動高亮顯示,就像前面我們講解的單模型輸入一樣。

以上就是Yii框架官方指南系列20-使用表單:大量收集表格輸入的內容,更多相關內容請關注PHP中文網(www.php.cn)!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn