2017-05-29 64 views
0

提交了一個包含開始和結束日期的表單,我需要一個Constraint來檢查結束日期是否晚於開始日期。添加約束以提交的形式比較兩個輸入

問題是,我不能攻擊一個約束到表單本身,只能到這個字段,因此我只能得到字段值,沒有來自其他表單輸入的值。

這是試圖使用回調約束的代碼。

class MyCustomType extends AbstractType 
{ 
/** 
* {@inheritdoc} 
*/ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
    ->add('dateFrom', null, [ 
     'constraints' => [ 
      new NotBlank([ 
       'message' => 'Error' 
      ]) 
     ], 
    ]) 
    ->add('dateTo', null, [ 
     'constraints' => [ 
      new NotBlank([ 
       'message' => 'Error!' 
      ]), 
      new Callback(function($object, ExecutionContextInterface $context, $payload) { 
       // Ėobject there is the field on which i check the constraint and i have no possible way to get the dateFrom value here 
      }) 
     ], 
    ]) 

例如:

  • 開始日期2017年1月1日 結束日期2018年1月1日 的形式將是有效的。

  • 開始日期2017-01-01 結束日期2016-12-30 該表格將無效。

回答

0
$form=$builder 
    ->add('dateFrom', null, [ 
     'constraints' => [ 
      new NotBlank([ 
       'message' => 'Error' 
      ]) 
     ], 
    ]) 
    ->add('dateTo', null, [ 
     'constraints' => [ 
      new NotBlank([ 
       'message' => 'Error!' 
      ]), 
      new Callback(function($object, ExecutionContextInterface $context, $payload) { 
       // Ėobject there is the field on which i check the constraint and i have no possible way to get the dateFrom value here 
      }) 
     ], 
    ]); 

//Before submit controll date. 
$builder->addEventListener(FormEvents::PRE_SUBMIT,function (FormEvent $event) 
{ 

    //Form data 
    $data=$event->getData(); 
    if($data['dateFrom']>$data['dateTo']) 
    { 
     //valid 
    } 
    else 
    { 
     //not valid 
    } 

} 
+0

我相信這會工作,但有應與驗證約束標準的解決方案。 –