lekoala/silverstripe-softdelete

SilverStripe 的软删除扩展

资助包维护!
lekoala

安装量: 91,048

依赖者: 0

建议者: 0

安全: 0

星标: 11

关注者: 4

分支: 7

公开问题: 0

类型:silverstripe-vendormodule

3.0.6 2023-10-13 07:51 UTC

This package is auto-updated.

Last update: 2024-09-14 23:49:06 UTC


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