我正在使用case when
。删除Silverstripe subsite module
后,我还要删除与子网站相关的所有其他信息,例如Subsite
等。我创建了一个Domains, Settings
来扩展extension
模型。
Subsite
问题
<?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."'");
}
}
上,如何显示自定义消息“除非删除所有成员,否则无法删除此子网站”?答案 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')
);
}
}