Symfony包含32个内置表单类型,覆盖了很大范围的企业需求。我们的社区持续地给出全新表单类型的建议,一旦它们能够满足日常所需,我们将引入框架。这就是为什么我们决定在Symfony 3.2中增加一个全新的DateInterval表单类型

这个表单类型对那些处理备忘、预约或类似功能的程序十分有用。如果你的model定义了一个remindEvery属性用于存储一个DateInterval PHP对象,添加下面代码使用三个select元素来编辑它的值:

1
2
3
4
5
6
7
use Symfony\Component\Form\Extension\Core\Type\DateIntervalType;
 
// remindEvery is a DateInterval PHP object
// remindEvery是一个DateInterval PHP对象
$builder->add('remindEvery', DateIntervalType::class, array(
    'widget' => 'choice',
));

DateInterval类型十分灵活,它可以操作DateInterval PHP对象、数组和ISO 8601 duration strings。当使用ISO 8601这种格式时,设置input选项为string以允许表单类型正确地转换其值:

1
2
3
4
5
6
// remindEvery is a PHP string using ISO 8601 format
// remindEvery是一个使用了ISO 8601格式的PHP字符串
$builder->add('remindEvery', DateIntervalType::class, array(
    'input' => 'string',
    'widget' => 'choice',
));

除了inputwidget,这个表单类型还定义了18个配置选项,用来控制年、月、周、日、时、分和秒是否显示,以及它们的占位符和取值是否允许被选中。

相关的文档还没有合并,但你已经可以在这篇Symfony Docs pull request中读到。