SiteConfigExtension(DataExtension)中包含onBeforeWrite函数

时间:2014-05-08 10:44:34

标签: php silverstripe

我创建了一个DataExtension来扩展我的SiteConfig。

在我的扩展程序中,我有一个onBeforeWrite函数

    public function onBeforeWrite() {
        parent::onBeforeWrite();

        /* FILL SHOP EMAIL FIELDS */
        if(! $this->ShopEmail ){
            $this->ShopEmail = 'foo';
        }

        if(! $this->ShopFromEmail ) {
            $this->ShopFromEmail = $this->ShopEmail;
        }

        if(! $this->ShopReplyEmail ) {
            $this->ShopReplyEmail = $this->ShopEmail;
        }

        /* SHOW ADD TO CART BUTTON IF THERE IS NO ITEMDETAIL PAGE */
        if( $this->ShopItemDetailPage == 0 ) {
            $this->ShopDirectItemToCart = 1;
        }
    }

这个功能刚刚起作用。 使用if子句,我收到一条通知,指向onBeforeWrite函数的第一行。没有它就什么都不做。

为什么会这样,我该如何解决?

先谢谢你

1 个答案:

答案 0 :(得分:4)

由于您处于DataExtension而不是DataObject,因此需要注意一些不同之处。

第一个,也就是导致你的错误的那个,就是父类没有onBeforeWrite,所以调用parent::onBeforeWrite()试图调用一个未定义的方法并抛出一个致命的错误。

第二个只会引发警告的是,数据库字段未在DataExtension上定义,因此您需要使用$this->owner来访问它们。例如,$this->owner->ShopEmail