Php Symfony表格日期范围加上现有日期

Php Symfony表格日期范围加上现有日期,php,symfony,Php,Symfony,我有一个用于创建和更新实体的表单。其中一个属性是日期,startDate,该输入允许今年和明年输入。目前,2019年和2020年。这是我在TestType.php中的代码: ->add('startDate', DateType::class, [ 'years' => range(date('Y'), date('Y') +1), ]) 这正如预期的那样有效。当用户希望使用过去一年的数据更新实体时,我会遇到一个问题,例如2017。在这种情况下,我希望将范围改为当年(201

我有一个用于创建和更新实体的表单。其中一个属性是日期,
startDate
,该输入允许今年和明年输入。目前,2019年和2020年。这是我在TestType.php中的代码:

->add('startDate', DateType::class, [
    'years' => range(date('Y'), date('Y') +1),
])

这正如预期的那样有效。当用户希望使用过去一年的数据更新实体时,我会遇到一个问题,例如
2017
。在这种情况下,我希望将范围改为当年(2017年)到现在+1年(2020年)。有什么方法可以在TestType.php文件中实现这一点吗

您可以在预设数据事件上设置起始年份,如:

$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
    $event->getForm()->add('startDate', DateType::class, [
        'years' => range(
            $event->getData()->getStartDate() ?
                $event->getData()->getStartDate()->format('Y') :
                date('Y'),
            date('Y')+1
         ),
    ]);
});

您可以在预设数据事件上设置开始年份,如:

$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
    $event->getForm()->add('startDate', DateType::class, [
        'years' => range(
            $event->getData()->getStartDate() ?
                $event->getData()->getStartDate()->format('Y') :
                date('Y'),
            date('Y')+1
         ),
    ]);
});

您是否有权访问此处的数据,这些数据告诉您正在更新现有数据以及在这种情况下的日期是什么?@riggsfully,我可以从我的控制器传递它。您是否有权访问此处的数据,这些数据告诉您正在更新现有数据以及在这种情况下的日期是什么?@riggsfully,我可以从我的控制器传过来。似乎工作得很好。我面临的唯一问题是未识别
getYear()
方法。我改变了这一点,只需格式化日期,将
getYear()
替换为
format('Y')
。答案已更新。不知道我为什么写getYear。。。别忘了把你的问题标为“已回答”;)看来效果不错。我面临的唯一问题是未识别
getYear()
方法。我改变了这一点,只需格式化日期,将
getYear()
替换为
format('Y')
。答案已更新。不知道我为什么写getYear。。。别忘了把你的问题标为“已回答”;)