我使用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)); !
你能帮我吗? 谢谢!答案 0 :(得分:0)
如果我理解了您要做的事情,我认为您应该setData
之后submit
,而不是之前。{/ p>
另外,请注意,因为您似乎在FormBuilder中使用"name"
但在视图中使用"Name"
(因此也许在您的AJAX调用中)。这可能是问题所在。