4

我有一个关于表单子项验证的问题。我有一个类型,它包含另一种类型的几种类型。在这些子类型中,我需要一个字段,一个不需要的恶魔。但即使两者都是空的,表单也已验证这是我的课程

  class PassengerList {

/**
 * @Assert\Valid() //If it's an array of objet, should validate all the object of the list *traverse
 */
protected $passengers;
/**
 * @Assert\Valid
 */
protected $passengers_child;
/**
 * @Assert\Valid
 */
protected $passengers_baby;
}

乘客列表类型

class PassengerListType extends AbstractType
 {
public function buildForm(FormBuilder $builder, array $options)
{
    $builder->add('passengers','collection', array(
            'type' => new PassengerType(),
            'allow_add' => false,
            'required'=> true,
            'allow_delete' => false));
    $builder->add('passengers_child','collection', array(
            'type' => new PassengerChildType(),
            'allow_add' => true,
            'allow_delete' => false));
    $builder->add('passengers_baby','collection', array(
            'type' => new PassengerBabyType(),
            'allow_add' => true,
            'allow_delete' => false));

}
function getName()
{
    return 'passenger_list';
}

}

乘客类型

class PassengerType extends AbstractType
{

public function buildForm(FormBuilder $builder, array $options)
{
    $date_params = array("widget"=>"single_text","input"=>"datetime",'format' => 'dd-MM-yyyy',);
    $builder
    ->add('civility', 'choice', array("choices"=>Passenger::getCivilityList()))
    ->add('birthdate','date',$date_params)
    ->add('last_name','text',array('required'=>true))
    ->add('first_name','text',array('required'=>false))
    ->add('type','hidden');
}
function getName()
{
    return 'passenger';
}
public function getDefaultOptions(array $options)
{
    return array(
            'data_class' => 'Travelyo\CoreBundle\Entity\Passenger',
    );
}
}

这给了我这个表格:

在此处输入图像描述

但是当使用 $form->isValid() 验证表单时,尽管我将两个字段都留空,但返回的值是 true。

我觉得问题是在儿童类型中没有任何验证。

你有任何可以帮助我的利兹吗?

4

1 回答 1

4

你用的是2.1吗?

您需要指定验证组或启用cascade_validation,类似于此问题

于 2012-08-14T13:59:09.957 回答