lekoala / silverstripe-softdelete
SilverStripe 的软删除扩展
3.0.6
2023-10-13 07:51 UTC
Requires
- php: ^7.4 || ^8
- lekoala/silverstripe-cms-actions: *
- silverstripe/framework: ^4.4 || ^5
- silverstripe/recipe-plugin: ^1 || ^2
- silverstripe/vendor-plugin: ^1 || ^2
README
为您的数据对象添加软删除行为。对象被标记为已删除并保留在数据库中。
软删除将遵循与删除相同的权限模式。
ModelAdmin 和 SecurityAdmin 已扩展以添加新的 GridField 操作,该操作替换了默认的删除操作
此模块依赖于 lekoala/silverstripe-cms-actions 以显示删除按钮
如何使用
只需将您的删除调用替换为 softDelete。
提供了新的扩展钩子,以避免副作用(onBeforeSoftDelete、onAfterSoftDelete)。如果您有需要与其父记录一起软删除的子记录,这些是理想的。
配置选项
SilverStripe\Admin\ModelAdmin: softdelete_from_list: true softdelete_from_list_exclude: [] extensions: - SoftDeleteModelAdmin SilverStripe\Admin\SecurityAdmin: softdelete_from_list: true softdelete_from_list_exclude: [] extensions: - SoftDeleteSecurityAdmin
您可以配置
- softdelete_from_list: 在一行上显示删除按钮。默认启用。
- softdelete_from_list_exclude: 即使全局启用,也隐藏这些类的删除按钮
防止意外删除
默认情况下,该模块将防止任何删除操作。要允许删除,您必须设置
SoftDeletable:$prevent_delete = false
从 CMS UI 删除记录的唯一方法是转到已软删除的记录并点击“真的删除”,这将调用记录上的“forceDelete”。
禁用过滤
您可以使用以下方法全局禁用过滤
SoftDeletable::$disable = true
或在查询级别
$dataQuery->setQueryParam('SoftDeletable.filter',false)
基于 ID 的过滤
默认情况下,此模块将在您明确请求特定 ID 时允许返回软删除的记录。这是设计用来防止意外破坏。如果您想确保不显示软删除的记录,请确保实现适合您使用的合适的 canView() 方法。
另一个选项是禁用该功能
SoftDeletable: check_filters_on_id: false
请注意,DataObject::get_by_id();
可以被缓存,这可能导致复杂的情况。
兼容性
测试了 4.4+
维护者
LeKoala - thomas@lekoala.be