Yii架構官方指南系列20——使用表單:批量收集表格輸入

來源:互聯網
上載者:User



有時我們想通過批量模式收集使用者輸入。也就是說, 使用者可以為多個模型執行個體輸入資訊並將它們一次性提交。 我們將此稱為 表格輸入(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('Save'); ?><?php echo CHtml::endForm(); ?></p><!-- form -->

注意,在上面的代碼中我們使用了 "[$i]name" 而不是 "name" 作為調用 CHtml::activeTextField 時的第二個參數。

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

以上就是Yii架構官方指南系列20——使用表單:批量收集表格輸入的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.