2012-08-14 61 views
4

我有一个关于窗体的孩子验证的问题。 我有一个类型,它包含多种类型的另一种类型。 在这些子类型中,我有一个必填字段,一个非必填字段。 但即使两者都是空的,形式验证 这里是我的班儿童类型没有使用isValid()以symfony2的形式进行验证

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

passengerListType

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

} 

PassengerType

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

这给我这个表格:

enter image description here

但随着$形式 - 验证表单时> isValid()的altough我离开这两个字段为空返回的值是真实的。

我有这样的感觉,问题是在chidlren类型中没有任何验证。

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

+0

请注意,Form :: isValid方法不会处理验证,但只会返回一个布尔值,在验证处理完成时设置(对于Form的bindRequest)。 – AlterPHP 2012-08-14 14:29:48

+0

你的乘客班是什么样的? – 2012-08-16 17:53:53

回答

4

你用的是2.1吗?

要么你需要指定validation groups,要么启用cascade_validation,类似于this question

+0

仍未升级到2.1,实际上在2.0.16上工作。 我会尝试使用验证组,因为cascade_validation在2.0.16中似乎不是有效的。 谢谢 – 2012-08-14 14:52:24

+0

我试图更新Symfony以启用cascade_validation。它确实添加了这些新功能。但我的表格仍被视为有效。 validation_groups到底能如何帮助我,好像孩子没有被验证一样,如果我按小组分开,他们也不会被验证,我错了吗? – 2012-08-15 07:37:50

+0

我不建议在这里使用cascade_validation,因为Valid约束应该可以工作。您的代码似乎存在一些问题(例如在Passenger类中)。 – 2012-08-16 17:55:08