【发布时间】:2019-02-28 16:54:15
【问题描述】:
也许我错过了一些简单的事情?但我有一个基于实体的 CRUD 表单,一切似乎都运行良好。可以很好地创建、编辑和更新对象。但是,当我更改日期时间字段上的默认小部件样式时,日期数据不再填充到编辑表单中,而是显示日期格式字符串“dd/mm/yyyy”。
这里有什么明显的问题吗?
在实体中的属性是这样的:
/**
* @ORM\Column(type="date", nullable=true)
*/
private $createdDate;
getter 和 setter:
public function getCreatedDate(): ?\DateTimeInterface
{
return $this->createdDate;
}
public function setCreatedDate(?\DateTimeInterface $createdDate): self
{
$this->createdDate = $createdDate;
return $this;
}
在表单构建器中:
->add('createdDate', DateType::class, [
'widget' => 'single_text',
'required' => false,
])
生成的 HTML:
<div>
<label for="hmr_core_createdDate" class="required">Created date</label>
<input type="date" id="hmr_core_createdDate"
name="hmr_core[createdDate]"
required="required">
</div>
请求属性中的CreatedDate:
-createdDate: DateTime @1551092357 {#975 ▼
date: 2019-02-25 21:29:17.0 Australia/Melbourne (+11:00)
调试输出:
如果我添加格式等选项似乎并不重要。只要我删除小部件行或将其设置为选择,它就可以工作了。
有什么想法吗?
【问题讨论】:
-
实体中的类型是“日期”还是“日期时间”似乎也无关紧要。注意。从作为选择类型的默认小部件更改为单个文本。
-
您能否使用表单以及实体中的 setter、getter 和构造函数显示(控制器)代码?
-
由于您的属性可以为空,您正在测试的值是否有可能在数据库中实际上为空,并且在它做错之前,例如总是创建一个 DateTime 对象而不传递使其回退到“现在”的值?
-
@dbrumann - 我知道它在数据库中不为空,因为只要我将小部件类型更改为“选择”,就会输出正确的日期。我还可以在传递给表单的参数中看到正确的日期时间......(我还检查了数据库)
-
您能否展示为该字段生成的 HTML 的样子?另外,请检查 Symfony 分析器中该特定字段的模型数据、规范数据和视图数据显示的内容。
标签: forms symfony datetime format widget