problème de form

Par yujunjie0603, il y a 10 ans


Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

Dans la page show_message, il y a un form qui permet de laisser une message, avec les fields "title, message, parents_id"

namespace Yoda\MessageBundle\Entity; ... /** * @ORM\ManyToOne(targetEntity="Message") * @ORM\JoinColumn(name="parents_id", referencedColumnName="id") */ public $parents; function getParents() { return $this->parents; } function setParents(Message $parents) { $this->parents = $parents; return $this; } ... namespace Yoda\MessageBundle\Form; ... public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('title') ->add('message', TextareaType::class, array('attr' => array('class' => 'tinymce'))) //->add('active') ->add('parents', HiddenType::class); //->add('owner'); } ... namespace Yoda\MessageBundle\Controller; public function newAction(Request $request) { $message = new Message(); $form = $this->createForm('Yoda\MessageBundle\Form\MessageType', $message); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $em = $this->getDoctrine()->getManager(); $message->setCreateDate(new \DateTime()); $message->setOwner($this->getUser()); $em->persist($message); $em->flush(); // if it is a children message, we will show parents message $redirectId = $message->getParents()->getId() ? $message->getParents()->getId() : $message->getId(); return $this->redirectToRoute('message_show', array('id' => $redirectId)); } return array( 'message' => $message, 'form' => $form->createView(), ); } public function showAction(Message $message) { $addForm = $this->createForm('Yoda\MessageBundle\Form\MessageType'); $addForm->get('parents')->setData($message->getId()); $childrenMessage = $this->getChildren($message); //var_dump($childrenMessage); return array( 'add_form' => $addForm->createView(), 'message' => $message, 'childrens' => $childrenMessage, ); }

Ce que je veux

quand on répond, on ajoute une ligne dans la base.

Ce que j'obtiens

Quand on commit, Il me retourne une message érreur

Catchable Fatal Error: Argument 1 passed to Yoda\MessageBundle\Entity\Message::setParents() must be an instance of Yoda\MessageBundle\Entity\Message, string given, called in C:\xampp\htdocs\symfony_projet2\vendor\symfony\symfony\src\Symfony\Component\PropertyAccess\PropertyAccessor.php on line 556 and defined

1 réponse

skp, il y a 10 ans

Bonsoir, l'erreur est assez parlante ta méthode setParents attend un objet de type Message et tu lui passes un string. Je pense que ton erreur est là :

public function showAction(Message $message) { $addForm = $this->createForm('Yoda\MessageBundle\Form\MessageType'); $addForm->get('parents')->setData($message->getId()); //cette ligne à replacer par $addForm->get('parents')->setData($message); $childrenMessage = $this->getChildren($message); //var_dump($childrenMessage); return array( 'add_form' => $addForm->createView(), 'message' => $message, 'childrens' => $childrenMessage, ); }