OctoberCMS是否具备软删除表单/列表功能?求推荐实现方案
好问题!OctoberCMS 默认并没有内置专门针对软删除的表单/列表行为,但官方生态里有成熟的解决方案,也有规范的自定义实现方式,结合你已经手动完成的恢复按钮、筛选功能,我整理了几个靠谱的方向:
一、官方推荐的插件:RainLab.Trash
这是 OctoberCMS 生态中最受欢迎的软删除插件,完全封装了软删除的全套逻辑,能帮你省去大量重复开发:
- 自动给目标模型添加
deleted_at字段和对应的 LaravelSoftDeletestrait - 后台列表页自动集成「已删除记录」筛选器,以及恢复、永久删除的批量操作按钮
- 表单页会自动识别已删除记录并展示状态提示,无需你手动编写 Ajax 控制器和筛选配置
- 支持关联模型的软删除联动处理
你只需要在模型设置中启用插件的特性,就能快速替换掉自己手动实现的部分,代码更规范也更易维护。
二、自定义实现的官方最佳实践(适合个性化需求)
如果你想继续基于现有代码优化,官方文档推荐遵循 Laravel + OctoberCMS 的融合规范:
- 模型层基础配置:直接复用 Laravel 的
SoftDeletestrait(OctoberCMS 基于 Laravel,完全兼容):use Illuminate\Database\Eloquent\SoftDeletes; class YourTargetModel extends Model { use SoftDeletes; // 把 deleted_at 加入日期字段列表 protected $dates = ['deleted_at']; } - 列表行为扩展:
- 在列表配置文件(
config_list.yaml)中添加软删除筛选器:scopes: show_deleted: label: 显示已删除记录 type: checkbox conditions: deleted_at is not null - 添加批量操作按钮到列表配置:
bulkActions: restore_selected: label: 恢复选中记录 icon: icon-refresh handler: onRestoreBulk force_delete_selected: label: 永久删除选中记录 icon: icon-trash handler: onForceDeleteBulk
- 在列表配置文件(
- 控制器 Ajax 方法规范写法:官方推荐的批量恢复示例:
public function onRestoreBulk() { $selectedIds = post('checked'); if (empty($selectedIds)) { $this->flashError('请先选择要恢复的记录'); return; } YourTargetModel::onlyTrashed() ->whereIn('id', $selectedIds) ->restore(); $this->flashSuccess('已成功恢复选中记录'); return $this->listRefresh(); }
三、官方示例参考
OctoberCMS 官方文档中针对「模型扩展」和「后台列表自定义」的章节,有专门基于 Laravel 软删除特性的示例片段,核心思路就是利用框架原生能力结合 October 的后台行为系统,不需要额外造轮子。
内容的提问来源于stack exchange,提问作者Wreigh
相关产品推荐
相关产品推荐

