Air*_*ram 4 forms validation symfony symfony-2.3
我想在Symfony2(2.3完全)中的某些步骤中执行一个表单,但是当我尝试这样做时,我的表单中出现错误.
我做了下一个:
1)我创建了一个课程
class MyClass
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
* @Assert\NotNull()
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="surname", type="string", length=255)
* @Assert\NotNull()
*/
private $surname;
}
Run Code Online (Sandbox Code Playgroud)
2)我创建了FormType类:
class MyClassType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', null, array('label' => 'name'))
->add('surname', null, array('label' => 'surname'));
}
Run Code Online (Sandbox Code Playgroud)
我创建了另外两个类来分离获取表单数据的过程:
class MyClass1Type extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', null, array('label' => 'name'));
}
class MyClass2Type extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('surname', null, array('label' => 'surname'));
}
Run Code Online (Sandbox Code Playgroud)
在控制器中我有一些方法:
public function new1Action()
{
$entity = new MyClass();
$form = $this->createForm( new MyClass1Type( $entity );
return array(
'entity' => $entity,
'form' => $form->createView(),
);
}
public function new2Action(Request $request)
{
$entity = new MyClass();
$formMyClass1 = $this->createForm(new MyClass1Type($entity) );
$formMyClass1->bind($request);
if (!$formMyClass1->isValid()) {
print_r($formMyClass1->getErrors());
return new Response("Error");
}
$form = $this->createForm( new MyClass2Type($entity) );
return array(
'entity' => $entity,
'form' => $form->createView(),
);
}
Run Code Online (Sandbox Code Playgroud)
我渲染第一个表单(new1Action)并且它完美地获取数据,但问题是我提交数据的时候.在new2Action中,应用程序抛出响应("错误")代码,因为表单无效.print_r()函数显示下一个信息:
Array ( [0] => Symfony\Component\Form\FormError Object ( [message:Symfony\Component\Form\FormError:private] => Este valor no deberÃa ser null. [messageTemplate:protected] => This value should not be null. [messageParameters:protected] => Array ( ) [messagePluralization:protected] => ) )
Run Code Online (Sandbox Code Playgroud)
我认为问题是类没有完成第一种形式的数据,但我需要分两步分离表单,我不知道如何处理这个错误.
有人能帮助我吗?
提前致谢.
使用MyClass1Type绑定实体后,您的实体具有有效名称但没有姓氏.$myFormClass1->isValid()返回false,因为它尝试验证实体并且您没有指定验证部分数据,因此它不喜欢surname为null.
您应该使用验证组来验证部分数据上的实体.入住这里的Symfony的书.
添加到您的表单中:
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'validation_groups' => array('validationStep1'),
));
}
Run Code Online (Sandbox Code Playgroud)
并在您的实体上的@Assert注释上定义验证组@Assert\NotNull(groups={"validationStep1"}):
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
* @Assert\NotNull(groups={"validationStep1"})
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="surname", type="string", length=255)
*/
private $surname;
Run Code Online (Sandbox Code Playgroud)