在YII中要实现图片的上传,可以使用activeFileField
1、在VIEW中:
enctype这句话一定要加上去。
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'tbl-goods-form',
// Please note: When you enable ajax validation, make sure the corresponding
// controller action is handling ajax validation correctly.
// There is a call to performAjaxValidation() commented in generated controller code.
// See class documentation of CActiveForm for details on this.
'enableAjaxValidation'=>false,
//要实现图片的上传与修改,enctype这句话一定要加上去。
'htmlOptions'=>array('enctype'=>'multipart/form-data')
)); ?>
2、在VIEW中:
<div class="row">
<?php echo $form->labelEx($model,'goods_small_pic'); ?>
<?php //echo $form->textField($model,'goods_small_pic',array('size'=>60,'maxlength'=>255)); ?>
<?php echo CHtml::activeFileField($model,'goods_small_pic'); ?>
<?php echo $form->error($model,'goods_small_pic'); ?>
<!--预览图,并且设置一个隐藏域,用来暂存修改前的URL信息-->
<?php echo '<img src="'.$model->goods_small_pic.'" width="100px"/>'; ?>
<?php if(!$model->isNewRecord){?>
<input type="hidden" name="temp_img2" id="hiddenField" value="<?php echo $model->goods_small_pic;?>"/>
<?php }?>
</div>
3、模型中:
public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
array('is_sale, is_delete, is_best, is_new, is_hot, is_promote', 'numerical', 'integerOnly'=>true),
array('cat_id, click_count, brand_id, goods_number, market_price, shop_price, promote_price', 'length', 'max'=>8),
array('goods_sn', 'length', 'max'=>16),
array('goods_name', 'length', 'max'=>32),
//array('goods_desc, goods_small_pic, goods_big_pic', 'length', 'max'=>255),
array('goods_desc','length','max'=>255),
//要实现图片的上传与修改,要将保存图片URL地址的字段改为file,如下所示。
array('goods_small_pic','file','types'=>'jpg,gif,png','on'=>'insert'),
array('goods_big_pic','file','types'=>'jpg,gif,png','on'=>'insert'),
array('promote_start_date, promote_end_date, add_time', 'safe'),
// The following rule is used by search().
// @todo Please remove those attributes that should not be searched.
array('goods_id, cat_id, goods_sn, goods_name, click_count, brand_id, goods_number, market_price, shop_price, promote_price, promote_start_date, promote_end_date, goods_desc, goods_small_pic, goods_big_pic, is_sale, is_delete, is_best, is_new, is_hot, is_promote, add_time', 'safe', 'on'=>'search'),
);
}
4、控制器中:
public function actionCreate()
{
$model=new TblGoods;
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
//使用下拉菜单,实现添加产品或修改产品时,可以从下拉列表选择产品类别:以下为第1步
//在Goods控制器下实例化category对象,并执行SQL语句,取得所有数据。
$category = TblCategory::model()->findAll();
if(isset($_POST['TblGoods']))
{
$model->attributes=$_POST['TblGoods'];
//实现文件,图片的上传
$model->goods_small_pic= CUploadedFile::getInstance($model, goods_small_pic);
$model->goods_big_pic= CUploadedFile::getInstance($model, goods_big_pic);
if($model->goods_small_pic){
$newimg='goods_small_pic_'.time().'_'.rand(1,9999).".".$model->goods_small_pic->extensionName;
//$newimg="abc.jpg";
$model->goods_small_pic->saveAs('assets/uploads/tblgoods/'.$newimg);
$model->goods_small_pic='assets/uploads/tblgoods/'.$newimg;
}
if($model->goods_big_pic){
$newimg2='goods_big_pic_'.time().'_'.rand(1,9999).".".$model->goods_big_pic->extensionName;
//$newimg2="abcd.jpg";
$model->goods_big_pic->saveAs('assets/uploads/tblgoods/'.$newimg2);
$model->goods_big_pic='assets/uploads/tblgoods/'.$newimg2;
}
if($model->save())
$this->redirect(array('view','id'=>$model->goods_id));
}
$this->render('create',array(
'model'=>$model,
//使用下拉菜单,实现添加产品或修改产品时,可以从下拉列表选择产品类别:以下为第2步
//在Goods控制器下create将上面得到的数组,分配到create这个VIEW页面。
'category'=>$category
));
}
/**
* Updates a particular model.
* If update is successful, the browser will be redirected to the 'view' page.
* @param integer $id the ID of the model to be updated
*/
public function actionUpdate($id)
{
$model=$this->loadModel($id);
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
//
//使用下拉菜单,实现添加产品或修改产品时,可以从下拉列表选择产品类别:以下为第1步
//在Goods控制器下实例化category对象,并执行SQL语句,取得所有数据。
$category = TblCategory::model()->findAll();
if(isset($_POST['TblGoods']))
{
$model->attributes=$_POST['TblGoods'];
//实现文件,图片的上传
$model->goods_small_pic= CUploadedFile::getInstance($model, goods_small_pic);
$model->goods_big_pic= CUploadedFile::getInstance($model, goods_big_pic);
if($model->goods_small_pic){
$newimg='goods_small_pic_'.time().'_'.rand(1,9999).".".$model->goods_small_pic->extensionName;
//$newimg="abc.jpg";
$model->goods_small_pic->saveAs('assets/uploads/tblgoods/'.$newimg);
$model->goods_small_pic='assets/uploads/tblgoods/'.$newimg;
}else{
$model->goods_small_pic=$_POST['temp_img1'];
}
if($model->goods_big_pic){
$newimg2='goods_big_pic_'.time().'_'.rand(1,9999).".".$model->goods_big_pic->extensionName;
//$newimg2="abcd.jpg";
$model->goods_big_pic->saveAs('assets/uploads/tblgoods/'.$newimg2);
$model->goods_big_pic='assets/uploads/tblgoods/'.$newimg2;
}else{
$model->goods_big_pic=$_POST['temp_img2'];
}
if($model->save())
$this->redirect(array('view','id'=>$model->goods_id));
}
$this->render('update',array(
'model'=>$model,
//使用下拉菜单,实现添加产品或修改产品时,可以从下拉列表选择产品类别:以下为第2步
//在Goods控制器下create将上面得到的数组,分配到create这个VIEW页面。
'category'=>$category
));
}