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

时间:2016-08-11 11:14:08

标签: silverstripe

我正在使用case when。删除Silverstripe subsite module后,我还要删除与子网站相关的所有其他信息,例如Subsite等。我创建了一个Domains, Settings来扩展extension模型。

Subsite

问题

  1. 代码完美无瑕。只是想知道还有其他更好的方法从其他表中删除相关记录吗?
  2. 在方法<?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."'"); } } 上,如何显示自定义消息“除非删除所有成员,否则无法删除此子网站”?

1 个答案:

答案 0 :(得分:3)

使用onAfterDelete删除相关记录非常好,虽然这听起来很像你在这里做了不必要的工作。谁会被一些流浪的数据库条目困扰?

关于你的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')
        );
    }
}