【问题标题】:Symfony2 make form date field not select old datesSymfony2 使表单日期字段不选择旧日期
【发布时间】:2023-03-19 16:23:01
【问题描述】:

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

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

这可以完美地完成工作,但是我不想选择旧日期,例如,如果今天是 2015 年 11 月 19 日,我不想选择 2015 年 11 月 18 日。它应该是灰色的什么的。

这样的事情有默认选项吗?如果不是,那么做我想做的最好的方法是什么?

【问题讨论】:

  • 这是在使用 jquery 日期选择器吗?
  • 是的,它确实使用了 jQuery!
  • @scoolnico 的回答很好,但是您还应该在客户端做一些事情。看看this 可能有用。

标签: php forms symfony


【解决方案1】:

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

例如(在这种情况下仅前一天):

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

【讨论】:

    【解决方案2】:

    问题是 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
        ]);
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-14
      • 1970-01-01
      • 1970-01-01
      • 2014-07-11
      相关资源
      最近更新 更多