En esta ocacion les traigo la manera de como subir imagenes al servidor y una ves subidas las imagenes como eliminarlas del servidor, este ejemplo es la continuacion del ejemplo anterior pero mejorado, asi que sin mas aqui esta el codigo.
De paso, para borrar los archivos del servidor lo conseguí haciendo lo siguiente, (seguro no es la mejor forma pero funciona)
Vista:
archivo _form.php
archivo _form.php
Código PHP:
..//array de opciones del form...'htmlOptions' => array(
'enctype' => 'multipart/form-data',
),
...
..//Otros Elementos..
..
<div class="row">
<?php echo $form->labelEx($model,'imagen'); ?> <?php echo CHtml::activeFileField($model, 'imagen'); ?> //con esto levantamos la imagen
<?php echo $form->error($model,'imagen'); ?></div>
<?php if($model->isNewRecord!='1'){ ?><div class="row">
<?php echo CHtml::image(Yii::app()->request->baseUrl.'/banner/'.$model->imagen,"imagen",array("width"=>200)); ?> // La Imagen se muestra aquí si la página es la página de actualización
</div>
<?php
}
?>
..
..
Otros elementos
..
..
Modelo:
solo es necesario agregar una linea en el metodo rules() en el Modelo, de la siguiente manera:
solo es necesario agregar una linea en el metodo rules() en el Modelo, de la siguiente manera:
Código PHP:
array('imagen', 'file','types'=>'jpg, gif, png', 'allowEmpty'=>true, 'on'=>'update'),
array('titulo, imagen', 'length', 'max'=>255, 'on'=>'insert,update'),
Controladores
Código PHP:
public function actionCreate()
{
$model=new Banner;
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['Banner']))
{
$rnd = rand(0,9999); // Generamos un numero aleatorio entre 0-9999
$model->attributes=$_POST['Banner'];
$subiendoImagen=CUploadedFile::getInstance($model,'imagen');
$imgNombre = "{$rnd}-{$subiendoImagen}"; // numero aleatorio + nombre de archivo
$model->imagen = $imgNombre;
if($model->save()){
$subiendoImagen->saveAs(Yii::app()->basePath.'/../images/banner/'.$imgNombre);
$this->redirect(array('view','id'=>$model->id));
}
}
$this->render('create',array(
'model'=>$model,
));
}
Código PHP:
public function actionUpdate($id)
{
$model=$this->loadModel($id);
if(isset($_POST['Banner']))
{
$rnd = rand(0,9999); // Generamos un numero aleatorio entre 0-9999
$_POST['Banner']['imagen'] = $model->imagen;
$model->attributes=$_POST['Banner'];
$subiendoImagen=CUploadedFile::getInstance($model,'imagen');
$imgNombre = "{$rnd}-{$subiendoImagen}"; // numero aleatorio + nombre de archivo
$model->imagen = $imgNombre;
if($model->save()){
if(!empty($subiendoImagen)){
$subiendoImagen->saveAs(Yii::app()->basePath.'/../images/banner/'.$imgNombre);
}
$this->redirect(array('view','id'=>$model->id));
}
}
$this->render('update',array(
'model'=>$model,
));
}
De paso, para borrar los archivos del servidor lo conseguí haciendo lo siguiente, (seguro no es la mejor forma pero funciona)
Código PHP:
public function actionDelete($id)
{
$model = $this->loadModel($id);
unlink(Yii::app()->basePath.'/../images/banner/'.$model->imagen);
$this->loadModel($id)->delete();
// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
if(!isset($_GET['ajax']))
$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('index'));
}
Fuente: Aqui