SilverStripe子网站模块删除子网站删除时的所有相关数据
我正在使用Silverstripe子网站模块。当SilverStripe子网站模块删除子网站删除时的所有相关数据,silverstripe,Silverstripe,我正在使用Silverstripe子网站模块。当子网站被删除时,我也想删除与子网站相关的所有其他信息,如域、设置等。我创建了一个扩展,该扩展将扩展子网站模型 <?php class SubsiteExtension extends DataExtension { public function onAfterWrite(){ parent::onAfterWrite(); //Some codes here
子网站
被删除时,我也想删除与子网站相关的所有其他信息,如域、设置
等。我创建了一个扩展
,该扩展将扩展子网站
模型
<?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')
);
}
}
我不会以这种方式删除内容,以防发生意外或您以后需要数据(例如报告),因此我建议采用这种方法。。。