无法设置不安全的属性上传yii

时间:2014-02-03 15:12:21

标签: yii

上传图片已经造成很大麻烦。我总是遇到两个问题。首先,当文件夹中存在资产管理器时,总是无法上传或无法找到文件!因此,当我的控制器说取消链接文件时,它不会取消链接任何内容。其次,当我的规则设置为安全时,它将显示无法设置不安全属性。

这是我的规则:

array('product_image,product_gallery_1, product_gallery_2, product_gallery_3, product_gallery_4, product_gallery_5, product_gallery_6', 'file','types'=>'jpg, jpeg, gif, png','allowEmpty'=>true, 'on'=>'update', 'safe'=>true),

在视图上我有

'htmlOptions'=>array('enctype'=>'multipart/form-data'), 

这是关于更新控制器的部分。它确实上传了多张图片:

public function actionUpdate($id)
    {
        $model=$this->loadModel($id);
        $old_img = $model->product_image;

        if(isset($_POST['Product']))
        {
            $model->update_date = time();
            $model->product_approval_status = "N";

            $t_product_image = $model->product_image;
            $model->attributes=$_POST['Product'];

            $product_image=CUploadedFile::getInstance($model,'product_image');

            $storeid = $model->store_id;
            $date = date('mdy');
            $rnd = rand(0,9999);

            $f_product_image = "{$rnd}-{$date}{$storeid}-{$product_image}";  

            //main img
            if(!empty($product_image))
            {
                $model->product_image = $f_product_image;
            }
            else
            {
                if(file_exists(Yii::app()->basePath.'/images/shop/thumbnail/thumb_'.$model->product_image))
                    unlink(Yii::app()->basePath.'/images/shop/thumbnail/thumb_'.$old_img);
                if(file_exists(Yii::app()->basePath.'/images/shop/product/'.$model->product_image)&& ($old_img !==null))
                    unlink(Yii::app()->basePath.'/images/shop/thumbnail/'.$old_img);

                $model->product_image = $t_product_image;
            }

            if($model->save())
            {
                $url = Yii::app()->basePath.'/images/shop/product/';
                $thumb = Yii::app()->basePath.'/images/shop/thumbnail/';
                if(!empty($product_image))
                {
                    $product_image->saveAs($url.$f_product_image);
                    $this->createThumb($url.$f_product_image, $thumb.'thumb_' . $f_product_image);
                }

                $this->redirect(array('submitted'));
            }
        }

        $this->render('update',array(
            'model'=>$model,
        ));
    }

1 个答案:

答案 0 :(得分:1)

问题在于您当前定义的scenario

在模型中,您可以在更新方案中指定安全属性。

array('product_image, ..., product_gallery_6',  ...  'on'=>'update', 'safe'=>true)

因此,在您的控制器中,您需要设置方案。

$model = new MyActiveRecord('update');

由于您使用的功能可能无法控制,因此您可以明确设置:

$model->scenario = 'update';

请注意,您的问题可能在其他地方,具体取决于loadModule()的操作,因为会自动加载ceratin ActiveRecord方案。请参阅链接页面中的“CActiveRecord方案”部分。