Symfony2 desde 0: Modificar posts

Ya tenemos listar y añadir posts. En esta ocasión veremos como modificar posts. Reutilizaremos el modelo del formulario y la vista y gran parte del controlador.

Veamos como queda la acción en el controlador.

public function editAction(Request $request,$post){
        //Entity Manager
        $em = $this->getDoctrine()->getManager();
        
        //Repositorios de entidades a utilizar
        $postRepository=$em->getRepository("WebBlogBundle:Posts");
        $categoryRepository=$em->getRepository("WebBlogBundle:Categories");
        
        //Conseguir todas las categorias
        $categories=$categoryRepository->findAll();
        
        //conseguimos el objeto del Post
        $post = $postRepository->findOneBy(array("id"=>$post));
        
        //Cargar foto si existe, hay que pasar el objeto File
        if($post->getWebPath()){
            $file = new \Symfony\Component\HttpFoundation\File\File($post->getWebPath());
            $post->setImage($file);
        }
            
        //Creamos el formulario, asociado a la entidad
        $form = $this->createForm(new PostsType(), $post);
    
        //utilizamos el manejador de peticiones
        $form->handleRequest($request);


        //Si el formulario ha sido enviado
        if ($form->isSubmitted()) {
           
            //Metemos en variables los datos que llegan desde el formulario
            $title = $form->get('title')->getData();
            $description = $form->get('description')->getData();
            $image = $form->get('image')->getData();
            $content = $form->get('content')->getData();
            $category_id = $form->get('category')->getData();
            $category=$categoryRepository->find($category_id);
            $user=$this->get('security.context')->getToken()->getUser();
            
            //Llamamos a los metodos set de la entidad y les metemos los valores del formulario
            $post->setTitle($title);
            $post->setDescription($description);
            $post->setImage($image);
            $post->setContent($content);
            $post->setCategory($category);
            $post->setUser($user);
            
        }else{
            
            //Cargar TAGS
            $tags=$post->getTagsPosts();
            if(count($tags)>=1){
                foreach($tags as $tag){
                    $tags_implode[]=$tag->getTag()->getName();
                }

                $tags_comas = implode(",", $tags_implode);

                $form->get('tagsPosts')->setData($tags_comas);
            }
        }
        
        //Si el formulario es valido tras aplicar la validacion de la entidad
        if ($form->isValid()) {
            
            $post->upload();
            $persist = $em->persist($post);
            $flush = $em->flush();
            
            
            $postRepository=$em->getRepository("WebBlogBundle:Posts");
            $tagRepository=$em->getRepository("WebBlogBundle:Tags");
            $tagsPostsRepository=$em->getRepository("WebBlogBundle:TagsPosts");
            
            $post=$postRepository->findOneBy(array("id"=>$post));
            
            //Borrar tags
            $tagsPosts=$tagsPostsRepository->findBy(array("post"=>$post));
            
            foreach($tagsPosts as $tagpost){
                $em->remove($tagpost);
            }
            $em->flush();
            
            //Añadir tags
            $tags=$form->get('tagsPosts')->getData();
            $addTags=$postRepository->addTags($tags,null,null,null,$post);
  
            //Mensaje flash
            $this->session->getFlashBag()->add('new', '¡Enhorabuena! Has editado el post correctamente');
            
            //Redirigir a la home
            return $this->redirect($this->generateURL('home'));
        }else{
            //Si el formulario está enviado
            if ($form->isSubmitted()) {
                
                //Mensaje flash
                $this->session->getFlashBag()->add('new', 'Rellena correctamente el formulario');
            }
        }
        
        //Renderizar vista
        return $this->render('WebBlogBundle:Posts:new.html.twig', array(
            "new_post_form" => $form->createView(),
            "categories"=>$categories,
            "title"=>"Editar post"
        ));
    }

Y ya está con esto el formulario ya aparecerá relleno con los datos antiguos y podremos editar cualquier campo.

Víctor Robles WEB

Autor: Victor

Desarrollador web - Formador online - Blogger

Compartir este post