1

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

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

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

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

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

4

1 回答 1

0

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

对于这个例子,我将假设一些具有字段 id 的定义 Product,名称 Product 与 ProductImage 上的“图像”有 ONE to MANY 关系,具有字段 id、productId、path

我还假设会有 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

于 2013-01-08T12:57:47.007 回答