【问题标题】:Symfony2: DateTime and form validationSymfony2:日期时间和表单验证
【发布时间】:2014-05-06 13:33:13
【问题描述】:

我需要知道通过表单处理日期时间的常用方法。

我的实体中有一个属性,例如

/**
 * @var \DateTime
 *
 * @ORM\Column(name="founded", type="datetime", nullable=true)
 */
private $founded;

然后我通过 FormTypes 渲染表单

->add('founded', 'date', array('widget' => 'single_text', 'format' => 'dd.MM.yyyy'))

然后用户输入一个像 01.01.1892 这样的字符串 并通过ajax发送到服务器:

form_team[basicdata][founded]:01.01.1914

在控制器中我处理数据并验证它:

$form = $this->createForm(new TeamsType(), $team);
$form->submit($this->getRequest()->request->get($form->getName()));

if ($form->isValid()) {
...

问题是,验证总是失败:这个值无效。 我猜一个日期时间对象是预期的,但客户端只是传递一个字符串。

该工作流程应该如何运作?请帮帮我:)

【问题讨论】:

  • 我认为您应该使用 datatransformer 将客户端数据转换为日期时间。见symfony.com/doc/current/cookbook/form/data_transformers.html
  • 我想这是一个日常问题。它是如何正常完成的?我认为应该已经有解决方案了...?
  • 我需要知道验证需要什么才能得到她。我无法弄清楚客户应该发送什么。例如,它不可能发送 01.01.1893,我总是得到“这个值无效”。我不知道错误是在哪里抛出的,以及它期望得到什么不会抛出该错误....

标签: php validation symfony datetime


【解决方案1】:

@Benjamin Lazarecki 是对的。

您需要将字符串数据(来自您的表单)转换为DateTime 对象。但是,该转换器已在此处实现:

http://api.symfony.com/master/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeToStringTransformer.html

所以,您可以直接即插即用;)

【讨论】:

  • 这是通常的方式吗?我不明白为什么我在使用表单组件时必须手动转换对象,它不应该自动处理购买框架吗?我想这是一个通常的用例,在表单输入中呈现实体的日期时间属性并将其处理回服务器。我可以在formtype中配置'input' => 'datetime'参数,所以我想它应该自动处理
  • 你必须使用转换器,因为你已经改变了小部件。
猜你喜欢
  • 1970-01-01
  • 2015-02-17
  • 2013-04-05
  • 1970-01-01
  • 2013-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
相关资源
最近更新 更多