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

问题描述:

我有一个扩展,它扩展了家长的onAfterWrite方法。SilverStripe检查是否正在编辑或添加记录?

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

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

问题:

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

感谢

我相信,在最初写就不会有ID集侵害的对象(至少,不会在onBeforeWrite)。

您可以通过在onBeforeWrite期间在对象上设置一个标志(例如:$this->isFirstWrite = true),然后检查它onAfterWrite来使用它。

更新:正如Barry所说的,有一个叫isInDB的函数可以使用,它只是检查是否有一个ID--如果我们不再明确依赖ID作为指示器它是否在数据库中。

我会建议$this->IsInDB()它返回“如果对象在数据库中为真”。链接到api。这将检查是否有ID,但是在一个名为“well”的函数中这样做是为了明确发生了什么。

+0

非常真实 - 我更新了我的文章 –