Cancellare un file pre-caricato

Ciao a tutti,

come nel topic precedente, sto lavorando sempre sull’upload dei file ( http://www.yiiframework.com/wiki/2/ ).

Ora l’azione “delete” dal controller, cancella solo la riga relativa dal DB: come posso fare per cancellare il file memorizzato?

Ho provato a modificare l’azione delete così:




public function actionDelete($id)

	{

		if(Yii::app()->request->isPostRequest)

		{

			// we only allow deletion via POST request

			unlink(Yii::app()->basePath.'/files/'.$this->loadModel($id)->image);

			$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('admin'));

		}

		else

			throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');

	}



Ovvero ho aggiunto la riga:




unlink(Yii::app()->basePath.'/files/'.$this->loadModel($id)->image);



ma non funziona.

Grazie!

magari il percorso del file è sbagliato. hai provato a fare l’echo dell’url per verificare?

Si, ho tentato.

Nel momento in cui va ad accedere a quell’URL (che sia con unlink o con un echo), è come se il pannello d’amministrazione da dove richiamo la funzione, andasse in loop; quindi non riesco nemmeno a farne l’echo.

E così che cosa ottieni?


        public function actionDelete($id)

        {

                if(Yii::app()->request->isPostRequest)

                {

                        die(Yii::app()->basePath.'/files/'.$this->loadModel($id)->image);

                }

        }

Mhh…niente.

Nel senso che è come se non facesse niente e/o stampa niente.

In caso, non vi è nessun altro modo per cancellare i file?

Io faccio così: nel mio model faccio l’overwrite della funzione delete:


function delete() {

        if ($this->image)

            unlink('images/anagra/' . $this->image);

        parent::delete();

    }

a me funziona senza problemi.

Se non stampa niente non é una richiesta post.