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.













