【问题标题】:Symfony / Form Type - not populating data for edit form for datetime in single_text widget styleSymfony / Form Type - 不以 single_text 小部件样式填充日期时间的编辑表单数据
【发布时间】: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)

调试输出:

debug1 debug2

如果我添加格式等选项似乎并不重要。只要我删除小部件行或将其设置为选择,它就可以工作了。

有什么想法吗?

【问题讨论】:

  • 实体中的类型是“日期”还是“日期时间”似乎也无关紧要。注意。从作为选择类型的默认小部件更改为单个文本。
  • 您能否使用表单以及实体中的 setter、getter 和构造函数显示(控制器)代码?
  • 由于您的属性可以为空,您正在测试的值是否有可能在数据库中实际上为空,并且在它做错之前,例如总是创建一个 DateTime 对象而不传递使其回退到“现在”的值?
  • @dbrumann - 我知道它在数据库中不为空,因为只要我将小部件类型更改为“选择”,就会输出正确的日期。我还可以在传递给表单的参数中看到正确的日期时间......(我还检查了数据库)
  • 您能否展示为该字段生成的 HTML 的样子?另外,请检查 Symfony 分析器中该特定字段的模型数据、规范数据和视图数据显示的内容。

标签: forms symfony datetime format widget


【解决方案1】:

好的,我修好了。不知何故,实体对象已从控制器作为参数传递中被删除,我不确定在三个下拉小部件的情况下它是如何接收数据的,但它确实存在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多