8

我的表单有问题,每次我想保存评论时都会出现这个错误:

数组或 Traversable 和 ArrayAccess 类型的预期参数,给定对象

首先我创建我的类commentType:

    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');
}

我自定义我的表单:

   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);
}

然后在我的控制器中我调用我的表单并将数据保存在数据库中:

$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)));

在我的树枝上我做:

<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>  

我说当我在我的控制器中更改对象“$comment”时在上面的行中使用“null”我没有错误但我无法将数据保存在数据库中......

有人有想法吗?

4

1 回答 1

6

使用集合约束,您只能验证数组(或任何实现的东西Traversable)。您必须转到课堂上的注释。Comments

于 2012-05-14T14:20:00.340 回答