Symfony2 Ajax + Forms

时间:2016-03-16 14:33:18

标签: php jquery ajax forms symfony

我使用Symfony 2.6(我知道,很快就会弃用)。 我想创建一个包含5或6次相同表单的网页(创建用户),因为一个用户可以创建有限数量的其他用户。 因此我无法使用FormBuilder,因为您无法多次显示。然后我创建了法线HTML表单:

 <form class="fcrv" action="{{ path('path') }}" method="POST">
      <input type="text" name="Name" placeholder="Name"/>
      <textarea rows="4" cols="50" name="comm"></textarea> 
      <input type="submit" value="Validate">
 </form>

我使用Ajax处理表单,我发送了控制器中所需的数据。我可以在Controller中获取数据:

$name = $request->request->get('Name');
$comm = $request->request->get('comm');

这是工作。 在此之后,我想模拟普通表格的行为。我需要创建我的新表单并将数据放入,所以我做了:

//create a new User
$user = new User();
$user->setCreateDate(new Date());

//Create the form
$form = $this->createForm(new UserType(), $user);
$form->setData(array('name'=>$name));
$form->setData(array('comm'=>$comm));

$form->submit($request->request->get($form->getName()));

if ($form->isValid()) {
   //Some actions
}

我的 UserType

<?php

 namespace Test\Bundle\Form;

 use Symfony\Component\Form\AbstractType;
 use Symfony\Component\Form\FormBuilderInterface;
 use Symfony\Component\OptionsResolver\OptionsResolverInterface;

 class UserType extends AbstractType
 {
     /**
      * @param FormBuilderInterface $builder
      * @param array $options
      */
     public function buildForm(FormBuilderInterface $builder, array $options)
     {
         $builder
             ->add('name', 'text')
             ->add('comm', 'text')
         ;
     }

     /**
      * @param OptionsResolverInterface $resolver
      */
     public function setDefaultOptions(OptionsResolverInterface $resolver)
     {
         $resolver->setDefaults(array(
             'data_class' => 'Cfau\CleBundle\Entity\FraisVisite',
             'csrf_protection' => false
         ));
     }

     /**
      * @return string
      */
     public function getName()
     {
         return 'test_bundle_user';
     }
}

实体用户中的条件只是: @Assert \ NotBlank()

但表格无效!

我禁用了CSRF令牌。

我用

 echo $form->getErrors(true, false);

查看我的表单有什么错误并且说:名称:错误:此值不应为空。但是我将数据放在 $ form-&gt; setData(array(' name'=&gt; $ name));

你能帮我吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

如果我理解了您要做的事情,我认为您应该setData之后submit,而不是之前。{/ p>

另外,请注意,因为您似乎在FormBuilder中使用"name"但在视图中使用"Name"(因此也许在您的AJAX调用中)。这可能是问题所在。