上传图片已经造成很大麻烦。我总是遇到两个问题。首先,当文件夹中存在资产管理器时,总是无法上传或无法找到文件!因此,当我的控制器说取消链接文件时,它不会取消链接任何内容。其次,当我的规则设置为安全时,它将显示无法设置不安全属性。
这是我的规则:
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,
));
}
答案 0 :(得分:1)
问题在于您当前定义的scenario
在模型中,您可以在更新方案中指定安全属性。
array('product_image, ..., product_gallery_6', ... 'on'=>'update', 'safe'=>true)
因此,在您的控制器中,您需要设置方案。
$model = new MyActiveRecord('update');
由于您使用的功能可能无法控制,因此您可以明确设置:
$model->scenario = 'update';
请注意,您的问题可能在其他地方,具体取决于loadModule()的操作,因为会自动加载ceratin ActiveRecord方案。请参阅链接页面中的“CActiveRecord方案”部分。