多个模型和上传文件

时间:2012-12-25 10:55:49

标签: file upload yii models

起初 - 我是Yii框架的新手。我自己做了一些研究,但是找不到我问题的精确解决方案。

假设有两个相关的模型 - 产品和图像。单个产品可能分配了多个图像。创建能够管理此类方案的创建/更新表单的最佳方法是什么?

Image模型包含各种字段以及图像文件的路径,因此它不仅仅是路径本身的“容器”。更重要的是 - 我需要为每个上传的图像生成缩略图,并将其路径存储在同一模型中。

我需要实现的与Django中已知的管理内联功能非常相似 - 产品创建/更新表单中应该有一个部分允许用户添加/修改/删除图像。

我尝试了multimodelform扩展,但我无法上传文件。完成任务的最佳方法是什么,而不必手动构建整个file-upload-enabled-multiple-model-form结构?

1 个答案:

答案 0 :(得分:0)

详细解决方案取决于您使用的是CActiveForm还是CHtml表单。由于您有2个相关模型,我假设您使用的是CActiveForm,并指出您需要记住的一些事项。

对于这个例子,我将假设一些定义 带有字段ID,名称的产品 与ProductImage上的“图像”具有一对多关系的产品 带有字段id,productId,路径

的ProductImage

我还假设有1个上传/编辑,但多删除

以下是观点:

$form = $this->beginWidget(
    'CActiveForm',
    array(
        'id' => 'upload-form',
        'enableAjaxValidation' => false,
        'htmlOptions' => array('enctype' => 'multipart/form-data'),
    )
);

echo $form->labelEx($product, 'name');
echo $form->fileField($product, 'name');
echo $form->error($product, 'name');

echo $form->checkBoxList($product, 'path', $product->images);


echo $form->labelEx($productImage, 'path');
echo $form->fileField($productImage, 'path');
echo $form->error($productImage, 'path');


$this->endWidget();

你的行动

public function actionUpdate($productId) {

    $product = Product::model()->findByPk($productId)->with('images');
    $productImage = new ProductImage();

    if(isset($_POST['Item']))
    {
        $product->attributes=$_POST['Product'];

        foreach($product->images as $im) {
            if(in_array($im->path, $_POST['Item']['Image']))
                $im->delete();
        }
        $productImage->image=CUploadedFile::getInstance($productImage,'path');
        if($productImage->save())
        {
            $productImage->image->saveAs('some/new/path');
            // redirect to success page
        }
    }
    $this->render('update', array(
            'product'=>$product,
            'productImage'=>$productImage,
        ));
}

现在请注意,此解决方案未经过测试,因此会出现错误,但它应该让您了解如何编写自己的表单。

资源: http://www.yiiframework.com/wiki/2/how-to-upload-a-file-using-a-model/

http://www.yiiframework.com/wiki/384/creating-and-updating-model-and-its-related-models-in-one-form-inc-image