DateType字段 - 只能在今天之后的几天内选择

时间:2016-06-21 22:19:13

标签: php input symfony-forms symfony

我有一个表格可以下订单,您可以选择(其中包括):

  • 约会时间
  • 小时外卖

看起来像这样:

enter image description here

我的表单中包含以下内容的部分代码如下:

$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));

但是现在我希望你只能选择今天的第二天 + 仅在下午3点到午夜

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

更新

我想限制下拉列表中的选项数量。因此,他们无法选择2016年6月21日或下午1点这样的一天。

1 个答案:

答案 0 :(得分:1)

有很多方法可以做到这一点:

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

对于小时,你也可以做同样的事情,你检查小时(加上分钟)是否在你指定的时间范围内,如果没有创建Flash错误消息并重定向到树枝。

备用选项(更难 - 可能需要更多代码)是基于作为日期时间对象的实体创建表单类。理想情况下,只有一个实体包含date&时间。我不能就此提出建议,但我没有尝试过这个;但我知道这应该是可能的。

Forms Classes are explained in this link

我希望这能回答这个问题吗?

编辑#2。 在第二次回答你的问题之后,我发现你可以使用TimeType :: class Field:

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

这限制了您从下午3点到晚上11点的可选时间(我使用范围功能进行了24小时格式化。这仅适用于小时数。 希望这是有道理的。