2017-07-08 63 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