DateType 字段 - 只能在今天后 select 天

DateType field - only possible to select days after today

我有一个可以下订单的表格select(除其他外):

看起来像这样:

我的表单中包含以下部分的代码是这样的:

$form = $this->createFormBuilder($order)
    ->add('dateTakeout', DateType::class, array('label' => "Kies uw datum voor afhaling *", 'required' => true))
    ->add('hourTakeout', TimeType::class, array('label' => "Kies het gewenste uur van afhalen *", 'required' => true));

但现在我希望你只能在后天select + 只能在下午 3 点到午夜 .

但我不知道如何在表格中预见这一点。有人可以帮我吗?

更新:

我想限制下拉菜单中的选项数量。所以他们不能选择像 2016 年 6 月 21 日这样的日子或像下午 1 点这样的时间。

您可以通过多种方式执行此操作:

您可以获得当前日期,然后像上面一样在您的控制器中查看日期是否在未来(假设是 7 月 1 日)。然后创建一个 Flashbag 消息并重定向到一个 Flash twig 模板。

对于小时数,您也可以执行相同的操作,检查小时数(加上分钟数)是否在您指定的时间范围内,如果不在,则创建 Flash 错误消息并重定向到 twig。

另一种选择(更难 - 可能需要更多代码)是基于作为日期时间对象的实体创建表单 class。理想情况下只有一个包含日期和时间的实体。我无法就此向您提出建议,但我没有尝试过;但我知道这应该是可能的。

Forms Classes are explained in this link.

我希望这能回答问题?

编辑#2。 第二次检查您的问题后,我发现您可以使用 TimeType::class 字段来做到这一点:

->add('hourTakeout', TimeType::class, array(
        'label' => "Kies het gewenste uur van afhalen *",
        'required' => true,
        'widget' => 'choice',
        'hours' => range(15,23),
        ));

这限制了您从下午 3 点到晚上 11 点的可选时间(我使用范围函数输入了 24 小时格式。这只是针对小时的修复。 希望这是有道理的。