如何在 SilverStripe 中的版本化数据对象上使用类似 onAfterPublish() 钩子的东西



我在 SilverStripe 中有一个简单的版本化数据对象。我正在尝试挂钩到发布操作,并在发布数据对象时发送电子邮件。

我认为 onAfterPublish() 方法在数据对象(仅限页面)上不可用,因此我希望模仿它或在 onAfterWrite() 函数中获得足够的逻辑。

这是我目前的代码:

static $has_written = false; // Hack so it only fires once on write()
public function onAfterWrite()
{
    parent::onAfterWrite();
    if (!self::$has_written) {
        $stage = $this->getSourceQueryParam("Versioned.stage");
        if ($stage === 'Live') {
            $email = new Email();
            ...
            $email->send();
        }
    }
    self::$has_written = true;
}

用于版本控制DataObjectsVersioned类没有onAfterPublish钩子,但它确实有一个可用于发送电子邮件的onBeforeVersionedPublish钩子:

public function onBeforeVersionedPublish($fromStage, $toStage, $createNewVersion = false) {
    $email = Email::create();
    // ...
    $email->send();
}

最新更新