多型号和上传文件



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

假设有两个相关的模型——Product和Image。单个产品可以分配多个图像。创建能够管理这种模式的创建/更新表单的最佳方法是什么?

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

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

我尝试了multimodelform扩展,但我无法让文件上传工作。什么是最好的方法来完成它,而不必手动构建整个支持文件上传的多模型表单结构?

具体的解决方案取决于您是使用CActiveForm还是html表单。因为你有2个相关的模型,我假设你正在使用CActiveForm,并会指出一些你需要记住的事情。

对于这个例子,我将假设一些定义带有字段id, name的产品与ProductImage上的"图像"有一对多关系的产品包含字段id, productId, path的ProductImage

我也假设有一次上传/编辑,但多次删除

视图如下:

$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,
        ));
}

现在请注意,这个解决方案没有经过测试,所以会有bug,但它应该给你一个关于如何编写自己的表单的想法。

资源: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

相关内容

  • 没有找到相关文章

最新更新