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.