2012-08-14 37 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