【发布时间】: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