SilverStripe子网站模块删除子网站删除时的所有相关数据

SilverStripe子网站模块删除子网站删除时的所有相关数据,silverstripe,Silverstripe,我正在使用Silverstripe子网站模块。当子网站被删除时,我也想删除与子网站相关的所有其他信息,如域、设置等。我创建了一个扩展,该扩展将扩展子网站模型 <?php class SubsiteExtension extends DataExtension { public function onAfterWrite(){ parent::onAfterWrite(); //Some codes here

我正在使用Silverstripe子网站模块。当
子网站
被删除时,我也想删除与子网站相关的所有其他信息,如
域、设置
等。我创建了一个
扩展
,该扩展将扩展
子网站
模型

<?php

class SubsiteExtension extends DataExtension {

        public function onAfterWrite(){
             parent::onAfterWrite();
             //Some codes here
        }

        public function onBeforeDelete(){
            //Check if member exist for Subsite, if so show warning.
        }

        public function onAfterDelete(){
            $id = $this->owner->ID;

            //DELETE ALL SUBDOMAINS RELATED TO DELETED SUBSITE
            DB::query("DELETE FROM SubsiteDomain WHERE SubsiteID='".$id."'");

            //DELETE SITE CONFIG 
            DB::query("DELETE FROM SiteConfig WHERE SubsiteID='".$id."'");

        }


}

使用
onAfterDelete
删除相关记录是非常好的,尽管听起来你在做不必要的工作。谁会被一些离群的DB条目所困扰

关于您的
onBeforeDelete
方法:否则我会解决它。替代扩展中的
canDelete
,如下所示:

public function canDelete($member)
{
    if( /* check if member exist for Subsite */ ){
        return false;
    }
    // returning null here means that this extension doesn't influence 
    // the delete permission at this point
    return null;
}
这将防止删除CMS中的记录。此外,您还可以使用
updateCMSFields
向用户显示一条通知,说明他无法删除记录的原因

public function updateCMSFields(FieldList $fields) 
{
    if (!$this->owner->canDelete()) {
        $fields->addFieldToTab(
            'Root.Main', 
            LiteralField::create('_deleteInfo', 'Your info text')
        );
    }
}

我不会以这种方式删除内容,以防发生意外或您以后需要数据(例如报告),因此我建议采用这种方法。。。