如何正确地将日期转换为字符串并以 symfony 形式转换回来,以便可以使用日期选择器

2024-04-10

在我的 Symfony 4 应用程序中,我有一个包含日期类型字段的实体。默认情况下,Symfony 将其呈现为一组月、日、年的选择框。我已将其更改为文本小部件,以便我可以使用 jQuery UI 日期选择器。

但我在尝试提交表格时遇到了问题。

这是我的实体上的字段:

/**
 * @ORM\Column(type="date")
 */
private $start_date;

这是我显示该字段的方式:

$builder->add('start_date', DateType::class, [
                'widget' => 'single_text',

                // prevents rendering it as type="date", to avoid HTML5 date pickers
                'html5' => false,

                // adds a class that can be selected in JavaScript
                'attr' => ['class' => 'js-datepicker'],
            ])

在我的页面上使用 jquery 和 jqueryui,这允许显示日期选择器。

以下是我目前正在尝试从日期转换为字符串的方法,反之亦然。目前,我只是尝试使用硬编码日期,一旦我知道我在做什么,我当然会更改它。

$builder->get('start_date')
->addModelTransformer(new CallbackTransformer(
    function ( $dateAsString ) {
        return new \DateTime('2019-01-01');
    },
    function ( $dateAsDate ) {
        return '2019-01-01';
    }
));

提交表单会产生此错误: 预期参数类型为“DateTimeInterface”,给定“string”。

有谁知道如何将日期作为日期类型存储在实体中,同时在表单中将其呈现为字符串?


我邀请您查看的文档DateType https://symfony.com/doc/current/reference/forms/types/date.html。您会发现您可以以多种格式存储日期,具体取决于input选项 :

  • 字符串(例如 2011-06-05)
  • 日期时间(DateTime 对象)
  • datetime_immutable(DateTimeImmutable 对象)
  • 数组(例如 ['year' => 2011, 'month' => 06, 'day' => 05])
  • 时间戳(例如 1307232000)

这是一个底层model value在您的实体中。在你的例子中你必须选择datetime这是默认值。

您做出了正确的选择widget选项 -single_text。不要忘记设置正确的format。这是view value.

在您的情况下,您不需要编写自己的数据转换器。 Symfony 将负责改变您的model value in view value反之亦然。它使得它使用vianormalised value:

`model data`(string, datetime, timestamp, etc.) -> `norm data` (`DateTime`) -> `view data` (string for widget=single_text, array for widget=choice)

and

`view data` (string for widget=single_text, array for widget=choice) -> `norm data` (`DateTime`) -> `model data`(string, datetime, timestamp, etc.)

虽然格式为view data and model data不同,格式不同norm data总是一样的——DateTime。您添加的模型转换器已返回string设置为标准化数据。这就是你收到错误的原因。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何正确地将日期转换为字符串并以 symfony 形式转换回来,以便可以使用日期选择器 的相关文章

  • 如何在 Symfony2 中使用 Doctrine OracleSessionInit 监听器?

    我正在使用 oracle 并且收到此错误 无法将数据库值 17 NOV 11 12 17 33 AM 转换为学说类型日期时间 预期格式 Y m d H i s 另外 我无法创建新行 因为 Oracle 抱怨日期时间格式 我知道mysql的日
  • Symfony 不会从集合中删除实体

    我知道一般来说有很多关于这个主题的帖子 不幸的是 这些大多涉及对数据库的实际持久操作 就我而言 我在持久操作之前发生了一个问题 我有一个带有实体 学说 持久性集合的表单 您可以通过 javascript 从 DOM 中删除 对象 提交后 当
  • Symfony 3.4 没有元数据类来处理错误

    我已经安装了 symfony 3 4 和 学说包 php gt 5 5 9 doctrine doctrine bundle 1 8 doctrine doctrine migrations bundle 1 3 doctrine orm
  • 独立 Symfony2 包内的功能测试

    我需要直接在独立包中进行一些功能测试 我不想测试控制器 只是测试真实服务之间的一些交互 我想知道是否有标准 最佳方法可以做到这一点 我用一种方法做到了 但想知道是否有更好的方法 这是我自己的解决方案 我总结了在独立包中测试的所有过程 1 首
  • 如何从 Symfony2 中的数据库加载配置设置?

    我当前在 config yml 文件中有许多设置 展望未来 我希望能够开发一个界面 管理员可以在其中更新这些设置 因此我希望能够通过数据库管理这些设置 我如何能够将这些设置从数据库加载到 Symfony2 中 以及在何时何地加载它们 Che
  • Symfony2 -> Twig -> 表单 -> 字段 -> 设置渲染 = true

    我有一个简单的问题 我有一个带有字段的表单 例如 builder gt add x gt add y gt add z 在我的树枝文件中 我使用了多个块 并且我想停止渲染字段 我查看了 b html twig 文件 a html twig
  • 如何从symfony2中的现有表生成实体?

    我有带有一些字段的表 my table 我想在 MyBundle 中使用 my table 生成实体 但我不想重新创建 MyBundle 中的所有实体 我怎样才能做到这一点 这是你可以做到的方法 第一步 要求Doctrine自省数据库并生成
  • 如何在createQueryBuilder中使用通配符?

    在我的存储库类中 我使用 public function getItemsByTag tag qb this gt createQueryBuilder c gt select c gt where c tags LIKE bipolar
  • 如何捕获 Symfony2/Silex 中的错误和异常?

    我想在我的 Silex 应用程序中捕获错误和异常 将它们包装在始终返回给客户端的自定义 JSON 响应中 我发现了三种基本方法 app gt error Symfony Component Debug ErrorHandler regist
  • 对自定义 symfony 约束进行单元测试

    这应该非常简单 但今天下午它让我发疯 对自定义 symfony 验证器进行单元测试的正确方法是什么 我能找到的所有文章都与我的做法完全相同 class Foo extends Constraint public string message
  • symfony2 FOSRestBundle 注释

    有人在控制器中使用过 put get post delete 注释 https github com FriendsOfSymfony FOSRestBundle blob master Controller Annotations 吗 我
  • 具有动态表单名称的 form_widget

    在我的 Twig 模板中 我有一个 FOR 循环 它创建多个表单 如下所示 for thing in things set form id myform thing Id set form name attribute form myfor
  • Symfony2中如何获取所有post参数? [复制]

    这个问题在这里已经有答案了 我想获取a的所有post参数symfony http symfony com Form I used all parameter this gt get request gt getParameterHolder
  • symfony api 平台深度

    到目前为止 我们一直在 Symfony Doctrine 和 Serializer 深度方面苦苦挣扎 我希望能够使用 Symfony 提供一级深度的 JSON REST API 从而允许我直接从视图管理我的 外键 和关系逻辑 GET peo
  • Symfony2 自定义密码编码器(bcrypt)

    我已经编写了自己的密码编码器 它实现了PasswordEncoderInterface class BCryptPasswordEncoder implements PasswordEncoderInterface protected en
  • Symfony2 - 将 Swiftmailer 添加为服务

    我想将我的电子邮件代码从我的控制器移至服务中 到目前为止我已完成以下操作 在 services yml 中创建条目 在 acme demobundle services EmailManager php 中创建了一个 EmailManage
  • 用户区域设置在第一次请求时不起作用

    我的网站运行的是 Symfony 主版本 到目前为止 我能够使用本地监听器逻辑 http symfony com doc master cookbook session locale sticky session html来自网站 由于代码
  • 将扩展配置文件实体添加到 FOS UserBundle

    我正在尝试扩展 FOS UserBundle 以允许扩展配置文件实体除了基本 UserBundle 字段之外还保存其他信息 因为我的网站上有多种类型的用户 所以我创建了单独的实体来保存个人资料信息 我的实体设置如下 class UserPr
  • Symfony Serialize 学说实体

    我有一个简单的实体类
  • 如何按关系的数量或成员对 Doctrine DQL 查询进行排序?

    我正在尝试创建一个查询 用于从 Doctrine 数据库中检索对象 并按特定一对多关系的成员数量排序 更具体地说 我有两个实体 Person 和 Federation 一个人可以是一个联盟的成员 人具有 联盟 关系 并且一个联盟可以有n人

随机推荐