【问题标题】:Symfony2 Ajax + FormsSymfony2 Ajax + 表单
【发布时间】:2023-03-07 09:03:01
【问题描述】:

我使用 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
}

我的用户类型:

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

查看我的表单有什么问题,它说:name: ERROR: This value should not be blank. 但我用 $form->setData(array('name '=>$name)); !

你能帮帮我吗? 谢谢!

【问题讨论】:

  • 不要使用 setData。当您的表单不是 html 表单时,您也可以使用 handelRequest。但是我不明白为什么你不能两次渲染同一个表单?
  • 我不知道,我把我的 {{ form_widget(form) }} 放在一个循环中,但他只显示一次。

标签: php jquery ajax forms symfony


【解决方案1】:

如果我正确理解了您要做什么,我认为您应该在 submit 之后而不是之前 setData。

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

【讨论】:

  • 感谢您的回答。当我在 StackOverflow 上发帖时,“名称”是一个语法错误,我的错。我尝试在提交后设置数据,但这也没有用,我得到了同样的错误。
  • 您可以转储$request-&gt;request-&gt;get($form-&gt;getName()) 的内容并编辑您的问题吗?
猜你喜欢
  • 1970-01-01
  • 2013-03-12
  • 2014-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-28
  • 2015-01-01
  • 2015-03-27
相关资源
最近更新 更多