我的實體的一個實例:Symfony2.1表格日期字段:傳遞給...參數1必須是日期時間
/**
* @var \DateTime $publishedAt
*
* @ORM\Column(name="published_at", type="date")
*
* @Assert\Date()
*/
private $publishedAt;
/**
* Set publishedAt
*
* @param \DateTime $publishedAt
* @return MagazineIssue
*/
public function setPublishedAt(\DateTime $publishedAt)
{
$this->publishedAt = $publishedAt;
return $this;
}
/**
* Get published_at
*
* @return \DateTime
*/
public function getPublishedAt()
{
return $this->publishedAt;
}
我的表單生成器:
$builder->add('publishedAt');
我的觀點:
{{ form_widget(form) }}
當我選擇日期並提交表格時,我發現錯誤:
Catchable Fatal Error: Argument 1 passed to ... must be an instance of DateTime,
string given, called in .../vendor/symfony/symfony/src/Symfony/Component/Form
/Util/PropertyPath.php on line 537 and defined in ... line 214
爲什麼會發生?如果我public function setPublishedAt($publishedAt)
替換場二傳手我得到了錯誤:
Fatal error: Call to a member function format() on a non-object
in .../vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/DateType.php on line 44
如果我改變表單生成器來
$builder->add('publishedAt','date')
一切工作正常。爲什麼會發生?爲什麼symfony無法猜測它並傳遞給字段setter正確的日期格式(\ DateTime而不是字符串)?
編輯:如果我刪除@Assert\Date()
然後一切正常工作。我認爲這是一個sf2.1錯誤,猜測日期字段類型
錯誤很明顯:您試圖設置字符串而不是日期時間對象,您是如何呈現已發佈的字段的? – Snroki
我上面描述過,只是'{{form_widget(form)}}'它呈現所有形式的字段 – Mikhail