Problème de setter

Par Robin0611, il y a 9 ans


Bonjour,

Alors voilà je me tire les cheveux : je comprend pas ce que ce passe.
Mon bundle me sert à ajouter des article à un blog. Jusque la tout marchait bien et depuis peu impossible : J'ai un setter qui part en vrille ... Il ne me reconnait plus la variable $Author des que je clique sur enregistrer !

Voici mon controller :

(Dans le premier vardump il m'affiche bien ma variable, dans le second, il m'affiche null !)

public function addAction(Request $request) { $listImages = $this->getDoctrine() ->getManager() ->getRepository('AMImageManagerBundle:Image') ->getImagesActivites(); $article = new Article(); var_dump($article); $form = $this->get('form.factory')->create(ArticleType::class, $article); if ($request->isMethod('POST') && $form->handleRequest($request)->isValid()) { var_dump($article); $em = $this->getDoctrine()->getManager(); $em->persist($article); $em->flush(); $request->getSession()->getFlashBag()->add('notice', 'Article bien enregistré.'); return $this->redirectToRoute('AM_Blog_view', array('id' => $article->getId())); } return $this->render('AMBlogBundle:Article:add.html.twig', array( 'form' => $form->createView(), 'listImages' => $listImages, )); }

Mon entité ou je persist par default ma variable :

namespace AM\BlogBundle\Entity; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Validator\Constraints as Assert; /** * Article * * @ORM\Table(name="article") * @ORM\Entity(repositoryClass="AM\BlogBundle\Repository\ArticleRepository") * @ORM\HasLifecycleCallbacks() */ class Article { /** * @var int * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @var string * * @ORM\Column(name="title", type="string", length=255) * @Assert\Length(min=10, minMessage="Le titre doit comporter 10 caractères minimum") */ private $title; /** * @var string * * @ORM\Column(name="author", type="string", length=255) * @Assert\NotBlank() */ private $author; /** * @var string * * @ORM\Column(name="content", type="text") * @Assert\NotBlank() */ private $content; /** * @var \DateTime * * @ORM\Column(name="date", type="datetime") * @Assert\DateTime() */ private $date; public function __construct() { $this->date = new \Datetime(); $this->author = 'MOI'; } /** * Get id * * @return int */ public function getId() { return $this->id; } /** * Set title * * @param string $title * * @return Article */ public function setTitle($title) { $this->title = $title; return $this; } /** * Get title * * @return string */ public function getTitle() { return $this->title; } /** * Set author * * @param string $author * * @return Article */ public function setAuthor($author) { $this->author = $author; return $this; } /** * Get author * * @return string */ public function getAuthor() { return $this->author; } // ... }

J'ai même essayé dans mon form :

->add('author', TextType::class, array('label' => 'Auteur', 'data' => 'Re Moi'))

Dans ma vue je vois bien "Re Moi" mais des que je clique sur Enregistrer, l'input se vide et me dit de le remplir ...
Quelqu'un peut m'aider ? Merci d'avance.

4 réponses

nans, il y a 9 ans

Salut,

essaye de mettre $form->handleRequest($request); avant ton if.

et de mettre en 2ème condition dans ton if $form->isValid()

Si cela ne fait rien, est-il possible de voir ton ArticleType?

Tu as toujours la possibilité de faire un var_dump($form->getData()) pour voir ce qui sort de ton formulaire

Robin0611, il y a 9 ans

Bonjour,

J'ai essay écela ne change rien du tout ...

Voici mon ArticleType entier :

<?php namespace AM\BlogBundle\Form; use AM\BlogBundle\Repository\CategoryRepository; use AM\ImageManagerBundle\Repository\ImageRepository; use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\Form\Extension\Core\Type\DateType; use Symfony\Component\Form\Extension\Core\Type\FormType; use Symfony\Component\Form\Extension\Core\Type\SubmitType; use Symfony\Component\Form\Extension\Core\Type\TextareaType; use Symfony\Component\Form\Extension\Core\Type\TextType; class ArticleType extends AbstractType { /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $pattern = 'Activites'; $builder ->add('date', DateType::class) ->add('title', TextType::class, array('label' => 'Titre')) ->add('image', EntityType::class, array( 'class' => 'AMImageManagerBundle:Image', 'choice_label' => 'alt', 'expanded' => true, 'multiple' => false, 'query_builder' => function(ImageRepository $repository) use($pattern){ return $repository->getLikeQueryBuilder($pattern); })) ->add('content', TextareaType::class, array ( 'label' => 'Contenu', 'attr' => array( 'class' => 'tinymce', 'data-theme' => 'advanced', ))) ->add('author', TextType::class, array('label' => 'Auteur', 'data' => 'Re Moi')) ->add('categories', EntityType::class, array( 'class' => 'AMBlogBundle:Category', 'choice_label' => 'name', 'multiple' => true, 'expanded' => true, 'query_builder' => function(CategoryRepository $repository) use($pattern){ return $repository->getLikeQueryBuilder($pattern); })) ->add('state', ChoiceType::class, array( 'choices' => array( 'Enregistrée' => 'Enregistree', 'Publiée' => 'Publiee'), 'label' => 'Etat', 'expanded' => true, 'multiple' => false)) ->add('distance', TextType::class) ->add('city', TextType::class, array('label' => 'Ville')) ->add('save', SubmitType::class, array('label' => 'Enregistrer')) ; } /** * @param OptionsResolver $resolver */ public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( 'data_class' => 'AM\BlogBundle\Entity\Article' )); } }
nans, il y a 9 ans

que dit le var_dump($form->getData()) au début de ton if ?

Robin0611, il y a 9 ans

Juste avant le If il dit cela :

object(AM\BlogBundle\Entity\Article)[425] private 'id' => null private 'title' => null private 'author' => string 'MOI' (length=3) private 'content' => null private 'date' => object(DateTime)[424] public 'date' => string '2016-11-01 08:27:25' (length=19) public 'timezone_type' => int 3 public 'timezone' => string 'Europe/Paris' (length=12) private 'state' => null

dans mon if : (J'ai du enlever le NotBlank() sinon on ne rentre meme pas dedans)

object(AM\BlogBundle\Entity\Article)[425] private 'id' => null private 'title' => string 'Mon titre de 10 caracteres' (length=26) private 'author' => null private 'content' => string '<div class="clearfix">&nbsp;</div> <div class="col-lg-6 col-md-6 col-sm-6 col-xs-12">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Incidunt quibusdam corporis ipsa adipisci inventore itaque. Repudiandae doloremque eaque expedita ab praesentium ducimus minima dicta molestiae! Quis, consequatur alias rerum temporibus!</div> <div class="col-lg-6 col-md-6 col-sm-6 col-xs-12">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Incidunt quibusdam corporis ipsa adipisci inventore itaque. Repudi'... (length=674) private 'date' => object(DateTime)[916] public 'date' => string '2016-11-01 00:00:00' (length=19) public 'timezone_type' => int 3 public 'timezone' => string 'Europe/Paris' (length=12) private 'state' => string 'Enregistree' (length=11)