如何在“新插入”或“更改数据”时更改初始数据

时间:2014-04-17 01:56:20

标签: symfony sonata-admin

我正在制作这样的表格。这是日期时间表。

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))

我该怎么做?

2 个答案:

答案 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