CAssetManager

Salve a tutti,

sto sbattendo la testa contro questo CAssetManager, ho capito che crea una cartella o file all’interno di assets, che serve per renderle “pubbliche” ma mi viene restituito un errore

il mio codice è questo:




$file=CUploadedFile::getInstance($model,'file'); //prende il riferimento al file

	if($file != null) {

	//	$dir2 = Yii::getPathOfAlias('application.uploads'); //il path alias

		$dir = Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias('application.uploads'));

		echo "dir".$dir;

		echo "percorso".$dir2;

		$file->saveAs($dir.'/'.$file->getName());

		$this->foto=$file->getName();

	}



ma ricevo come errore :


move_uploaded_file(...../assets/fa7983da/12.jpg): failed to open stream: No such file or directory

la Cartella viene creata in assets con dentro il relativo file, ma ricevo cmq questo Warning.

Ma ogni volta che metto un file con CAssetsManager, anche se esiste, mi crea una cartella?

Grazie a tutti

Edit Post:

Ho Modificato lo script in questo modo:


$file=CUploadedFile::getInstance($model,'file'); //prende il riferimento al file

		if($file != null) {

		//	$dir2 = Yii::getPathOfAlias('application.uploads'); //il path alias

			$dir = Yii::getPathOfAlias('application.uploads');

			echo "dir".$dir."<br/>";

			echo "percorso".$dir2;

			$file->saveAs($dir.'/'.$file->getName());

			$dir2 = Yii::app()->getAssetManager()->publish($dir);


			//$this->foto=$file->getName();

		}



e sembra andare…comunque sia ogni volta che metto un file mi crea una cartella?

Mmmm io metto i file caricati nella cartella /upload. La cartella assets la utilizzo con le estensioni.

ma hai cambiato .htaccess ?

E’ possibile fare una variabile globale che mi punta a uploads senza dover scrivere Yii::getPathOfAlias(‘application.uploads’); ?

in modo che quando accedo il controller posso subito richiamarla tramite una variabile tipo $UrlUpload?

Non è esattamente il codice che uso io … ma di fatto noi abbiamo a disposizione Yii::app()->basePath che fa riferimento alla cartella protected. Con … andiamo alla cartella superiore. Tutto qui.




                $originale = Yii::app()->basePath . "/../uploads/" . @$_FILES["Immagini"]["name"]["immagine"];

                $model->immagine = CUploadedFile::getInstance($model, 'immagine');

                $model->immagine->saveAs($originale);



quello che ho capito anche leggendo questo, è chein assets ci vanno i js, img, e altre cose che servono per la creazione dei Widget e altri componenti, proprio per non rischiare il sovrascriversi dei due.

Le immagini e tutto il resto per “l’uso” finale nostro, si devono mettere in un’altra cartella, ma sempre fuori protected, proprio sfruttando come suggerisci te


Yii::app()->basePath

Ho l’esigenza di creare un file temporaneo nella cartella assets per elaborarlo

e poi restituirlo in output al fruitore dell’applicazione per fargli fare il download.

Leggendo questa discussione, ho fatto così:

  1. ho creato una cartella vuota in /protected/temp

  2. ho scritto questo snipped nel controller:




private $_assetsUrl;

	

public function getAssetsUrl()

{

	if ($this->_assetsUrl === null) {

		$dir = Yii::getPathOfAlias('application.temp');

		//echo "dir".$dir."<br/>";

		$this->_assetsUrl = Yii::app()->getAssetManager()->publish($dir);

	} 

	return $this->_assetsUrl;

}	



quando invoco la funzione effettivamente ottengo il percorso dell’assets legato alla sessione corrente.

Esattamente ciò che voglio.

Ma ciò che non mi piace, è che gli sto dicendo di copiare una directory vuota publish($dir);

C’è un modo per dirgli direttamente:

Qual’è la directory dell’assets attuale?