때때로 배치 모드를 통해 사용자 입력을 수집하고 싶을 때가 있습니다. 즉, 사용자는 여러 모델 인스턴스에 대한 정보를 입력하고 동시에 제출할 수 있습니다. 이러한 입력은 일반적으로 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)); }
이 작업이 준비되었으므로 HTML에 표시하려면 batchUpdate
보기에서 계속 작업해야 합니다. 테이블 입력 항목.
<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 -->
위 코드에서는 CHtml 호출로 "[$i]name"
대신 "name"
을 사용했습니다. :activeTextField 두 번째 매개변수입니다.
검증 오류가 있는 경우 앞서 설명한 단일 모델 입력과 마찬가지로 해당 입력이 자동으로 강조 표시됩니다.
위는 Yii Framework 공식 가이드 시리즈 20 - Forms 사용: 폼에 입력된 내용을 일괄 수집하는 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!