4

我想在 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;
}

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'));     
}

我还创建了 2 个类来分离获取表单数据的过程:

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'));     
}

在控制器中我有一些方法:

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(),
    );
}

我渲染了第一个表单(new1Action),它完美地获取了数据,但问题是当我提交数据时。在 new2Action 中,应用程序会抛出 response("error") 代码,因为表单无效。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] => ) ) 

我认为问题在于类不完整,第一个表单中的数据不完整,但我需要将表单分两步分开,我不知道如何处理这个错误。

有人可以帮助我吗?

提前致谢。

4

1 回答 1

6

将您的实体与 MyClass1Type 绑定后,您的实体有一个有效的名称但没有姓氏。$myFormClass1->isValid()返回 false,因为它尝试验证实体并且您没有指定验证部分数据,所以它不喜欢 surname 为空。

您应该使用验证组在部分数据上验证您的实体。在这里查看Symfony 书籍。

在您的表格中添加:

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'validation_groups' => array('validationStep1'),
    ));
}

并在您的实体上的 @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;
于 2013-07-22T15:24:06.983 回答