Php 带有onBeforeWrite函数的SiteConfigExtension(DataExtension)

Php 带有onBeforeWrite函数的SiteConfigExtension(DataExtension),php,silverstripe,Php,Silverstripe,我创建了一个DataExtension来扩展我的SiteConfig 在我的扩展中,我有一个onbeforewite函数 public function onBeforeWrite() { parent::onBeforeWrite(); /* FILL SHOP EMAIL FIELDS */ if(! $this->ShopEmail ){ $this->ShopEmail = 'foo';

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

在我的扩展中,我有一个onbeforewite函数

    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子句,我会收到一个通知,它将我指向onbeforewite函数的第一行。没有它,什么也做不了

这是为什么?我如何解决这个问题

提前感谢您

因为您使用的是DataExtension,而不是DataObject,所以有一些差异需要注意

第一个是导致错误的原因,即父类上没有onBeforeWrite,因此调用parent::onBeforeWrite试图调用未定义的方法并引发致命错误

第二个问题只会引起警告,即DataExtension上没有定义数据库字段,因此需要使用$this->owner来访问它们。例如,$this->owner->shopmail。

由于您使用的是DataExtension,而不是DataObject,因此有两个不同之处需要注意

第一个是导致错误的原因,即父类上没有onBeforeWrite,因此调用parent::onBeforeWrite试图调用未定义的方法并引发致命错误


第二个问题只会引起警告,即DataExtension上没有定义数据库字段,因此需要使用$this->owner来访问它们。例如,$this->owner->shopmail。

这将是$this->owner->shopmail,因为您在扩展中,而不是扩展类本身……谢谢,但为什么不作为答案呢;这将是$this->owner->shopmail,因为您在扩展中,而不是扩展类本身…谢谢,但为什么不作为答案呢;非常感谢。老板解决了这个问题。您确定使用onBeforeWrite函数吗?因为现在它起作用了。是的,他是:。onbeforewrite等函数在扩展代码中没有父::部分的情况下工作。不会出现错误,因为函数是在DataExtension类的父类中定义的。这是一个空函数,实际上什么都不做,但可以避免一个错误。谢谢!老板解决了这个问题。您确定使用onBeforeWrite函数吗?因为现在它起作用了。是的,他是:。onbeforewrite等函数在扩展代码中没有父::部分的情况下工作。不会出现错误,因为函数是在DataExtension类的父类中定义的。这是一个空函数,实际上什么也不做,但可以避免一个错误。