Php Silverstripe将数据对象添加到Siteconfig

Php Silverstripe将数据对象添加到Siteconfig,php,silverstripe,Php,Silverstripe,我正在尝试将dataobject添加到站点配置设置中。 我已经设法添加了一个标志领域,这项工作现在我想添加一些重复领域,如社会媒体领域。这不管用。我犯了一个错误 下面是代码和错误。我查看了数据库,所有字段都是在dev/build之后创建的。 我也有同花顺=全部 mysite/_config/app.yml SiteConfig: extensions: - CustomSiteConfig mysite/code/extensions/CustomSiteConfig.php mysi

我正在尝试将dataobject添加到站点配置设置中。 我已经设法添加了一个标志领域,这项工作现在我想添加一些重复领域,如社会媒体领域。这不管用。我犯了一个错误

下面是代码和错误。我查看了数据库,所有字段都是在dev/build之后创建的。 我也有同花顺=全部

mysite/_config/app.yml

SiteConfig:
 extensions:
  - CustomSiteConfig
mysite/code/extensions/CustomSiteConfig.php

mysite/code/extensions/SocialMedia.php

class SocialMedia extends DataObject { 

    public static $db = array( 
        'SortID' => 'Int',
        'Social' => 'Text',
        'Icon' => 'Text',
        'URL' => 'Text'
    );

    public static $has_one = array(
        'CustomSiteConfig' => 'CustomSiteConfig'
    );

    public function getCMSFields() {
        return new FieldList(
            new TextField('Social'),
            new TextField('Icon'),
            new TextField('URL')

        );

    }
}
错误消息

Fatal error: Call to undefined method CustomSiteConfig::SocialMedia() in file/path/mysite/code/extensions/CustomSiteConfig.php on line 34
第34行是

$gridField = new GridField("SocialMedia", "SocialMedia", $this->SocialMedia(), $gridFieldConfig);

在decorator/DataExtension上,应该使用$this->owner,而不仅仅是$this。第34行应该是这样的:

$gridField = new GridField("SocialMedia", "SocialMedia", $this->owner->SocialMedia(), $gridFieldConfig);
另见:

$gridField = new GridField("SocialMedia", "SocialMedia", $this->owner->SocialMedia(), $gridFieldConfig);