Update Com Imagem

Olá amigos,

Eu estou fazendo um cadastro que vai ter a imagem principal de um post. Consegui fazer o create corretamente, porém no update estou com um problema…

Editando os dados do Post e removendo a atual imagem cadastrada e não cadastrando uma nova imagem eu preciso excluir a antiga imagem (eu excluo o bd e do servidor). Acontece que assim como está o meu código ao editar um post, que tenha uma imagem, removendo a antiga imagem e não cadastrando uma nova imagem ele simplesmente não deleta a antiga e não realiza ação nenhuma, só funciona se:

  • Ao editar o Post edita-se também a imagem;

  • Ao editar o Post edita-se todos os dados e não se altera nada na imagem;

Create e Update:




class PostController extends CController

{

	public function actionCreate()

	{

		$model       = new Post;

		$modelImage  = new Image;


		if(isset($_POST['Post']))

		{

			$model->attributes = $_POST['Post'];

			$image             = CUploadedFile::getInstance($modelImage ,'nome');


			if(isset($image)){

				$imagePost = ImageController::salvaImage($image); // Salva a imagem no DB e Server e retorna o id da imagem

				$model->idImage = $imagePost;

			}

			if($model->save())

				$this->redirect(array('admin'));

		}

		$this->render('create', array('model'=>$model, 'modelImage'=>$modelImage));

	}


	public function actionUpdate()

	{

		$model       = $this->loadModel($_GET['idPost']);

		$modelImage  = new Image;


		if(isset($_POST['Post']))

		{

			$model->attributes = $_POST['Post'];

			$image             = CUploadedFile::getInstance($modelImage ,'nome');


			if(isset($image)){

				if($model->idImage) { // Caso o post já tenha uma imagem cadastrada salvamos os dados desta antiga imagem para excluirmos no fim do processo de edição

					$oldImage = Post::model()->findByPk($id);

				}

				$imagePost = ImageController::salvaImage($image,'posts'); // Salva a imagem no DB e Server e retorna id da imagem

				$model->idImage = $imagePost;

			}

			if($model->save())

				if(isset($oldImage)) { // Se existe imagem antiga então...

					ImageController::excluiImage($oldImage->idImage); // Excluímos a antiga imagem no banco de dados e no servidor

				}

				$this->redirect(array('admin'));

		}

		$this->render('create', array('model'=>$model, 'modelImage'=>$modelImage));

	}

}



Espero que tenha sido claro e que possam me ajudar =)

Grande abraço!!!




 if($model->idImage) { // Caso o post já tenha uma imagem cadastrada salvamos os dados desta antiga imagem para excluirmos no fim do processo de edição

                                        $oldImage = Post::model()->findByPk($id);

                                }



de onde vem essa variavel $id ?

Quando vc usa




$model       = $this->loadModel($_GET['idPost']);



vc ja tem os dados carregado não precisa selecionar novamente




 public function actionUpdate()

        {

                $model       = $this->loadModel($_GET['idPost']);

                $modelImage  = new Image;


                if(isset($_POST['Post']))

                {

                        $model->attributes = $_POST['Post'];

                        $image             = CUploadedFile::getInstance($modelImage ,'nome');


                        if(isset($image)){

                                if(!empty($model->idImage)) { // Caso o post já tenha uma imagem cadastrada salvamos os dados desta antiga imagem para excluirmos no fim do processo de edição

                                        $oldImage = $model->idImage;

                                }

                                $imagePost = ImageController::salvaImage($image,'posts'); // Salva a imagem no DB e Server e retorna id da imagem

                                $model->idImage = $imagePost;

                        }

                        if($model->save())

                                if(isset($oldImage)) { // Se existe imagem antiga então...

                                        ImageController::excluiImage($oldImage); // Excluímos a antiga imagem no banco de dados e no servidor

                                }

                                $this->redirect(array('admin'));

                }

                $this->render('create', array('model'=>$model, 'modelImage'=>$modelImage));

        }



Desculpe… na verdade o update começa assim:




 public function actionUpdate($id)

        {

                $model       = $this->loadModel($id);

                $modelImage  = new Image;



… é daí que vem a variável $id :D

Sim, eu sei que os dados são carregados novamente, mas o problema está somente quando o Post já possui uma imagem e ao editarmos eu removo essa imagem.

Não estou sabendo sabendo como identificar que o usuário removeu a atual imagem do form. No form o input da imagem está assim:




<?php echo $form->fileField($modelImage, 'nome'); ?>



Obrigado pela resposta e atenção… aguardo mais ajudas… ;D

Como esta a sua view ? posta aqui por favor.