SilverStripe检查是否正在编辑或添加记录?

时间:2016-08-15 06:56:04

标签: silverstripe

我有一个扩展,扩展了父母的onAfterWrite方法。

<?php
public function onAfterWrite(){
   parent::onAfterWrite();

   $newTask = new Mytask($this->owner->ID);
   $newTask->copyTask();
}
?>

问题:

我想实例化类MyTask并仅在添加新记录时调用其方法,而不是在编辑现有记录时调用它。如何检查我们是否只是编辑现有记录或在方法onAfterWrite中添加了新记录?

由于

2 个答案:

答案 0 :(得分:6)

我相信在初始写入时,对象不会设置 { server: 'nginx', date: 'Mon, 15 Aug 2016 08:59:42 GMT', 'content-type': 'text/plain; charset=utf-8', 'content-length': '0', connection: 'close', 'x-message-id': 'kQdayBbvSKSb9ZlVDCUKTg', 'x-frame-options': 'DENY' } (至少不会在ID期间设置。)

您可以通过在onBeforeWrite期间在对象上设置标记(例如:$this->isFirstWrite = true)然后检查onBeforeWrite来使用此功能。

更新:正如Barry正确地说的那样,你可以使用一个名为onAfterWrite的函数,只检查是否有ID - 如果我们不再明确依赖ID,将来可能会保护你作为是否在DB中的指示。

答案 1 :(得分:6)

我建议$this->IsInDB()返回&#34;如果对象在数据库中则为True&#34;。链接到api。这会检查是否有ID,但是在一个很好的命名函数中这样做是为了清楚说明发生了什么。