【发布时间】:2014-09-01 11:28:23
【问题描述】:
我有一个包含日期字段的学说实体的 symfony 项目。一切正常,但我希望能够选择输入日期和月份。所以我可以输入:01-01-2014,或者只是 2014。
小部件存在于标准的 3 个选择字段中。当我只输入年份字段时,它不会验证。
有没有办法只输入年份?
【问题讨论】:
我有一个包含日期字段的学说实体的 symfony 项目。一切正常,但我希望能够选择输入日期和月份。所以我可以输入:01-01-2014,或者只是 2014。
小部件存在于标准的 3 个选择字段中。当我只输入年份字段时,它不会验证。
有没有办法只输入年份?
【问题讨论】:
我也遇到过同样的问题。在我的应用程序中,我有一个带有年份和月份的日期字段,其中月份是可选的。我决定使用自定义映射类型(http://symfony.com/doc/current/cookbook/doctrine/dbal.html#registering-custom-mapping-types、http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/types.html#custom-mapping-types)并将这些值作为 varchar 存储在 db 中。如果搜索的可能性很重要,我认为这可以重写为将值存储为 date,至少在 MySQL 中,因为您可以将月份和日期存储为 00(与 https://stackoverflow.com/a/5882493/779084 相比)。
您可以在下面找到 Symfony 2.6 的代码。
https://gist.github.com/piotrgradzinski/2a2ba7c1a565dba723f6
【讨论】:
在 php 中,日期具有日、月和年。您需要拥有所有 3 个才能获得有效日期。为了实现您的目标,我建议创建您自己的具有两个字段的实体 - 一个日期和一个布尔值。创建新对象时,将日期设置为 1 月 1 日,将布尔值设置为 false。如果用户输入日期,则将布尔值更改为 true。这样即使用户想要使用 1 月 1 日,您也会知道它是有效日期,因为布尔值已更改。
用户也不需要查看布尔字段,只需向他们显示月份和日期字段,如果他们输入任何数据,则在持久化对象时将布尔值更改为 true。
【讨论】: