我有一个Blah
类型的实体,其中包含以下字段:
/**
* @var datetime $begin
*
* @ORM\Column(name="begin", type="datetime", nullable=true)
*/
private $begin;
/**
* @var datetime $end
*
* @ORM\Column(name="end", type="datetime", nullable=true)
*/
private $end;
使用以下getter / setter:
/**
* @param $begin
*/
public function setBegin($begin)
{
$this->begin = $begin;
}
/**
* @return \DateTime
*/
public function getBegin()
{
return $this->begin;
}
/**
* @param $end
*/
public function setEnd($end)
{
if ($end < $this->begin) {
$this->end = $this->begin->add(\DateInterval::createFromDateString('1 day'));
} else {
$this->end = $end;
}
}
/**
* @return \DateTime
*/
public function getEnd()
{
return $this->end;
}
以及具有以下内容的相应表单类型:
$builder->add('begin', 'datetime', array(
'label' => 'Begin',
'required' => false,
));
$builder->add('end', 'datetime', array(
'label' => 'End',
'required' => false,
));
该方法的表单处理部分:
$form = $this->createForm(new BlahType(), $blah);
if ($request->getMethod() == 'POST') {
$postData = $request->request->all();
if (!empty($postData['save'])) {
$form->handleRequest($request);
$numThings = $postData['blah']['numThings'];
if ($numThings) {
for ($i = 0; $i < $numThings; ++$i) {
$thing = new Thing();
$blah->addThing($thing);
}
}
$em->persist($blah);
$em->flush();
}
}
当我尝试保存这些条目时,null
会被传递回实体,尽管填充的实体包含每个条目的两个数组
传回实体的屏幕截图:
$form->handleRequest()
之后填充的实体应该具有的屏幕截图:
毋庸置疑,我很困惑。根据{{3}},datetime
字段应默认为input
,datetime
,但我将数据作为一系列每个字段有两个数组 - 一个包含日,月和年的数组,另一个包含小时和分钟。即使这样,null
也被传递回实体并保存在数据库中。
令人费解。有什么建议/答案吗?
编辑:表单本身在null
:
viewData
个
答案 0 :(得分:0)
想出来。问题是由于PHP莫名其妙地只识别大陆/城市时区而不是旧的国家/时区时区。美国/东方不再有效。