私のエンティティ:
/**
* @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がそれを推測してフィールドセッターに適切な日付形式(文字列ではなく\ DateTime)を渡すことができないのはなぜですか?
編集:私が削除した@Assert\Date()
場合、すべてが正常に動作します。日付フィールドタイプを推測することによるsf2.1のバグだと思います