我有点迷茫。我正在关注这个Collecting Tabular Input。我有一个产品表单,在产品表单中我有一个属性表单,如颜色/大小。由于控制器中的循环,我无法理解本教程。所以我得到它检查记录的数量并循环它但是如果没有记录怎么办。这个教程似乎在说创建一个新模型。当然是。但是,如果没有记录并告诉它创建一个新记录,你怎么可能将它循环到视图中。也许我没有正确理解这一点。
我只想添加3条记录,空白或填写。没有js添加额外的记录。试着先了解这一点。
控制器:
public function getProdAttr($id) {
$items = array();
if (isset($_POST['ProductAttribute']) ) {
$items = ProductAttribute::model()->findAllByAttributes(array('product_id',$id));
if($items!==null){
foreach ($_POST['ProductAttribute'] as $item) {
$items[] = ProductAttribute::model()->findByPk($item['product_attribute_id']);
}
}
else $items[] = new ProductAttribute();
}
return $items;
}
public function actionUpdate($id)
{
$model=$this->loadModel($id);
$attributes=$this->getProdAttr($id);
if(isset($_POST['ProductAttribute']))
{
$valid=true;
foreach($attributes as $i=>$attribute)
{
if(isset($_POST['ProductAttribute'][$i]))
$attribute->attributes=$_POST['ProductAttribute'][$i];
$valid=$attribute->validate() && $valid;
}
if($valid)
$attributes->save();
}
//stuff from product model
}
视图:
//stuff for product model form
<div class="form">
<?php echo CHtml::beginForm(); ?>
<table>
<tr><th>Name</th><th>Description</th><th>Price</th></tr>
<?php foreach($attributes as $i=>$attribute): ?> //lost here, what if there's no records?
<tr>
<td><?php echo CHtml::activeTextField($attribute,"[$i]name"); ?></td>
<td><?php echo CHtml::activeTextArea($attribute,"[$i]description"); ?></td>
<td><?php echo CHtml::activeTextField($attribute,"[$i]cost"); ?></td>
</tr>
<?php endforeach; ?>
</table>
</div>