ho creato un'actionCreate che permetta di fare l'upload delle immagini, salvando sul DB il nome del file che funziona esattamente come voglio.
Ora ho bisogno di rinominare il file in modo che, se l'utente carica due files con lo stesso nome, questo venga rinominato con un nome random così da evitare l'incongruenza tra i due file e per sostituire caratteri particolari come gli spazi con degli underscore.
Per fare questo, ho caricato l'estensione CFile, ma vi è sicuramente un'incongruenza tra i tipi di file.
Quella che segue è l'actionCreate:
public function actionCreate() { $model=new Articoli; // Uncomment the following line if AJAX validation is needed // $this->performAjaxValidation($model); if(isset($_POST['Articoli'])) { $model->attributes=$_POST['Articoli']; //prende l'istanza dell'immagine che è stata caricata con POST (in questo caso) $model->image = CUploadedFile::getInstance($model, 'image'); $c_image = $model->image; //rename $myfile = Yii::app()->file->set(Yii::getPathOfAlias('webroot').'/images/articoli/'.$model->image, true); $random = substr(number_format(time() * rand(),0,'',''),0,10); $myfile->rename($random); $model->image = $myfile; //->filename; //end rename if($model->save()){ if(isset($c_image)){ //nell'attributo "image" delal tabella, viene salvato il percorso del file $file = Yii::getPathOfAlias('webroot').'/images/articoli/'.$model->image; $model->image->saveAs($file); //Creo il thumbnail per l'anteprima $thumb = Yii::app()->phpThumb->create($file); //Yii::app()->baseUrl.'/images/articoli/'.$model->image $thumb->resize(128,128); $thumb->save(Yii::getPathOfAlias('webroot').'/images/articoli/thumbnails/thumb_'.$model->image); }//if }//if $this->redirect(array('view','id'=>$model->id)); } $this->render('upload',array( //'create',array( 'model'=>$model, )); }
Se eseguo il codice, Yii mi dà un'errore sul tipo:
"Object of class CFile could not be converted to string "
solo che non so come risolverlo.