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 =)
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));
}
public function actionUpdate($id)
{
$model = $this->loadModel($id);
$modelImage = new Image;
… é daí que vem a variável $id
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: