我正在制作这样的表格。这是日期时间表。
public function configureFormFields(FormMapper $formMapper)
{
$d = new \DateTime;
$formMapper
->with('General')
->with('name')
->add('doneAt',null,array('data' => $d))
->add('enabled',null, array('required' => false))
->end()
;
}
' doneAt form'始终将当前时间设置为初始数据。
但我不想在数据存储时设置初始数据。
例如
1)制作新数据 doneAt显示2014/04/17(今天),所以我将此数据更改为2014/03/03并保存
2)改变exsting数据 然后我点击1)插入的数据但是,doneAt设置为当前时间(不是2013/03/03而是2014/04/17)。 我想保留初始数据为2013/03/03
总之我想做的是
if (doneAt is stored)
->add('doneAt')
if (doneAt is not stored)
->add('doneAt',null,array('data' => $d))
我该怎么做?
答案 0 :(得分:1)
我建议您为此目的使用Doctrine Extensions。
我认为您可以使用timestampable扩展名来实现目标。
例如 - 字段$ updated将在仅更新时设置:
/**
* @var datetime $updated
*
* @Gedmo\Timestampable(on="update")
* @ORM\Column(type="datetime")
*/
private $updated;
创建的字段$仅将当前时间戳存储在新对象
中 /**
* @var datetime $created
*
* @Gedmo\Timestampable(on="create")
* @ORM\Column(type="datetime")
*/
private $created;
您还可以跟踪属性或属性列表以进行更改(标题和正文),如下所示:
/**
* @var datetime $contentChanged
*
* @ORM\Column(name="content_changed", type="datetime", nullable=true)
* @Gedmo\Timestampable(on="change", field={"title", "body"})
*/
private $contentChanged;
答案 1 :(得分:1)
如果需要doneAt,您只需在实体类中设置defaut值:
$doneAt = new \DateTime();
如果未设置,则在实体中设置默认值。 您还可以签入管理员新创建的实体:
if($this->subject->getId()){ // new entity has not id set