在表单中添加多个模型记录表单 - 收集表格输入yii

时间:2014-05-02 14:58:42

标签: yii

我有点迷茫。我正在关注这个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>

0 个答案:

没有答案