Salut à tous !
Dans la continuité du développement de mon forum, je rencontre un léger soucis lorsque j'envois mon formulaire d'édition d'un topic.
J'ai 2 entités, une Topic et une Post liées par une relation biderectionnelles OneToMany et ManyToOne.
J'ai eu au départ des soucis pour récupérer le contenu du premier post et l'afficher dans mon champ mais ce problème est résolu par contre maintenant lorsque je valide mon formulaire je me retrouve avec une erreur :
Je comprends l'erreur qui me dit que la méthode topic->setPost() attend un objet de type Post. Mais je ne comprends pas pourquoi il me sort cette erreur sachant que pour moi je lui passe bien un objet Post.Catchable Fatal Error: Argument 1 passed to Sds\ForumBundle\Entity\Topic::setPost() must be an instance of Sds\ForumBundle\Entity\Post, string given, called in C:\wamp\www\Symfony\vendor\symfony\symfony\src\Symfony\Component\PropertyAccess\PropertyAccessor.php on line 350 and defined in C:\wamp\www\Symfony\src\Sds\ForumBundle\Entity\Topic.php line 240
Il semblerait que l'erreur se déclenche lors du traitement de cette ligne :
Mon controller :
Code : Sélectionner tout - Visualiser dans une fenêtre à part $form->bind($request);
Mon TopicEditType :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 public function editTopicAction(Topic $topic) { $forum = $topic->getForum(); $post = $topic->firstPost(); $user = $topic->getUser(); $form = $this->createForm(new TopicEditType($post), $topic); $request = $this->get('request'); if($request->getMethod() == 'POST') { $form->bind($request); if($form->isValid()) { $post->setContent($topic->getPost()->getContent()); $forum->addTopic($topic); $user->addTopic($topic); $user->addPost($post); $topic->addPost($post); $em = $this->getDoctrine()->getManager(); $em->persist($topic); $em->persist($post); $em->flush(); return $this->redirect($this->generateUrl('SdsForumBundle_forum', array('slug' => $forum->getSlug()))); } } return $this->render('SdsForumBundle:Forum:editTopic.html.twig', array('topic' => $topic, 'form' => $form->createView())); }
Un grand merci d'avance.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 <?php namespace Sds\ForumBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolverInterface; class TopicEditType extends AbstractType { private $post; public function __construct(\Sds\ForumBundle\Entity\Post $post) { $this->post = $post; } public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('title') ->add('post', 'ckeditor', array( 'label' => 'Content', 'data' => $this->post) ); } public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( 'data_class' => 'Sds\ForumBundle\Entity\Topic' )); } public function getName() { return 'sds_forumbundle_topicedittype'; } }
Partager