Symfony2使表单日期字段不选择旧日期

时间:2015-11-19 08:36:48

标签: php forms symfony

在symfony2表单创建器中,我有一个简单的日期字段:

    ->add('start_date', 'date', array(
        'html5' => false,
        'widget' => 'single_text',
    ))

这完美地完成了工作,但我不想选择旧日期,例如,如果今天是2015-11-19我不想选择2015-11-18。它应该是灰色的东西。

这样的东西有默认选项吗?如果没有,那么做什么是最好的方法呢?

2 个答案:

答案 0 :(得分:1)

您可以在特定选项中使用range来实现它。

仅举例(仅在此案例的前一天):

$builder->add('start_date','date', array(
   'days' => range(date('d') -1, date('d')),
));

答案 1 :(得分:0)

问题是DateType不适用于日期,而是使用单独的年,月和日值列表(如果需要,可以将其传递给构建器,请参阅http://symfony.com/doc/current/reference/forms/types/date.html)。如果您希望类型知道"日期之后的日期"你需要建立一个自定义表单类型,它并不难:http://symfony.com/doc/current/cookbook/form/create_custom_field_type.html

您可以扩展Symfony \ Component \ Form \ Extension \ Core \ Type \ DateType并覆盖setDefaultOptions:

class MyDateType extends DateType {

  public function setDefaultOptions(OptionsResolverInterface $resolver){
    parent::setDefaultOptions($resolver);

    //Insert here your logic to create valid values for year, month, day
    $my_list_of_years = .....;
    $my_list_of_months = .....;
    $my_list_of_days = .....;

    $resolver->setDefaults([
      'years' => $my_list_of_years,
      'months' => $my_list_of_months,
      'days' => $my_list_of_days
    ]);
  }
}