I have a problem with my form, I have this error every time I want to save a comment:
The expected argument to an array of types, or Traversable and ArrayAccess, the specified object
Firstly, I create my commentType class:
public function buildForm(FormBuilder $builder, array $options) { $builder ->add('comment', 'textarea') ->add('commentedName', 'text') ->add('idNews','hidden', array('error_bubbling'=>true)) ->add('country', 'text') ->add('email','email') ->add('captcha', 'captcha'); }
I customize my form:
public function getDefaultOptions(array $options){ $collectionConstraint = new Collection (array ( 'email' => new Email(array('message' => 'invalid address email')), 'commentedName' => array(new MaxLength(array('limit' => 30, 'message' => ''))), 'comment' => array(new MinLength(array('limit' => 20, 'message' => ''))), 'country' => new MinLength(array('limit' => 3, 'message' => '')), 'idNews' => array(new MaxLength(array('limit' => 30, 'message' => ''))), )); return array('validation_constraint' => $collectionConstraint); }
then in my controller I call my form and I save the data in the database:
$comment = new \Mybundle\BackendBundle\Entity\Comments(); $form = $this->createForm(new \Mybundle\MainBundle\Form\CommentType(), $comment); $request = $this->get('request'); if ($request->getMethod() == 'POST') { $form->bindRequest($request); if ($form->isValid()) { $idNews= $this->getDoctrine() ->getRepository('Mybundle\BackendBundle\Entity\News') ->find($id); $comment->setIdNews($idNews); $em = $this->getDoctrine()->getEntityManager(); $em->persist($comment); $em->flush(); return $this->redirect($this->generateUrl('News',array('id' => $id,'slug'=>$slug)));
and in my branch I do:
<table style="float: right;" > <tbody> <tr> <td>{{ form_widget(form.commentedName) }} </td> <td>{{ form_label(form.commentedName, "name") }}</td> </tr> <tr> <td class="comment-error">{{ form_errors(form.commentedName) }}</TD> </tr> <tr> <td>{{ form_widget(form.country) }} </td> <td>{{ form_label(form.country, "country") }}</td> </tr> <tr> <td class="comment-error">{{ form_errors(form.country) }}</TD> </tr> <tr> <td class="large_text">{{ form_widget(form.email) }} </td> <td>{{ form_label(form.email, "address") }}</td> </tr> <tr> <td class="comment-error">{{ form_errors(form.email) }}</td> </tr> <tr> <td>{{ form_widget(form.comment) }} </td> <td>{{ form_label(form.comment, "comment") }}</td> </tr> <tr> <td class="comment-error">{{ form_errors(form.comment) }}</td> </tr> <tr> <td>{{ form_widget(form.captcha) }} </td> </tr> <tr> <td class="comment-error">{{ form_errors(form) }}</td> </tr>
I notice when I change my controller to the "$ comment" object with "null" in the line above, I did not have an error, but I can not save the data in the database ...
Anyone have an idea?