2017-07-08 60 views
1

我有一個包含2個日期的表單:開始日期(datedebut)和結束日期(datefin)。 我希望結束日期始終在開始日期之後。我怎樣才能做到這一點?以symfony形式的日期和日期

我的表單類型:

class ReservationType extends AbstractType 
{ 
    /** 
    * {@inheritdoc} 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('datedebut',DateType::class,array(
       'widget' => 'choice', 
       'years' => range(date('Y'), date('Y')+20), 
      )) 
      ->add('datefin',DateType::class,array(
       'widget' => 'choice', 
       'years' => range(date('Y'), date('Y')+20), 
      )) 
      ->add('nbplaces') 
     ; 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'Bridge\TravelBundle\Entity\Reservation' 
     )); 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function getBlockPrefix() 
    { 
     return 'Bridge_TravelBundle_Reservation'; 
    } 
} 
+1

其實問題不是很清楚,你應該更新你的問題,以確切地指定你想達到什麼(如果必要的話,增加更多的服務器/前端代碼)。你想在表單提交後檢查'datefin'的值嗎?閱讀[我應該避免問哪些類型的問題?](http://stackoverflow.com/help/on-topic)和[如何在StackOverflow上提出問題](http://stackoverflow.com/help/how-提問)能夠做出有用的,結構良好的並且符合主題的問題。 –

+0

這不是一個服務器端的事情,你需要使用Javascript更新第二個日期輸入,然後在服務器上驗證它。 – Doug

回答

1

通常這些類型的任務是通過添加驗證約束來檢查,如果一個字段的值大於其他的解決。實施callback驗證約束的文件中指出:http://symfony.com/doc/current/reference/constraints/Callback.html您還可以創建自定義類約束驗證和到位的驗證邏輯存在:http://symfony.com/doc/current/validation/custom_constraint.html

只要用戶試圖提交的datefin值小於datedebut選定值這樣他會看到一個驗證錯誤,表單將不會被處理。

之後,您總是可以添加一些JavaScript代碼,它將在字段中過濾可用日期,datedebut字段中的值發生更改後。

只有在提交第一個日期字段的值時,您纔可以使用動態表單修改來呈現第二個日期字段(並在服務器端過濾其可用日期)。檢查了這一點:http://symfony.com/doc/current/form/dynamic_form_modification.html