Dcat Admin 还在用?我给它补了三层:维护型基座、组件 Kit、真实演示站
Dcat Admin 还在用?我给它补了三层:维护型基座、组件 Kit、真实演示站

Dcat Admin 2.x 是个很好用的 Laravel 后台框架,很多人手上还有跑在 Laravel 8、PHP 7.4 上的老项目。但框架版本在往前走,业务不能停。
所以我做了三件事,各自解决一层问题:
| 仓库 | 角色 | 包名 |
|---|---|---|
| woodynew/dcat-admin | 基座 fork:同步上游、修兼容性和通用缺陷 | woodynew/dcat-laravel-admin |
| woodynew/dcat-admin-kit | 通用组件扩展:列显示器、表单工具、行操作、Widget | woodynew/dcat-admin-kit |
| woodynew/dcat-admin-kit-demo | 真实可交互演示站:每个组件的活样例 + 可复制源码 | 项目仓库 |
外加一个老牌扩展 z-dcat-iframe-tab,负责 iframe 多标签页后台。
下面按层说。
一、基座:让 2.x 跟得上 Laravel 和 PHP
woodynew/dcat-laravel-admin 是 jqhph/dcat-admin 2.0 分支的维护型 fork,保留原 MIT License 和 Dcat\Admin\ 命名空间,接入项目基本只需要换 Composer 包名。
维护内容集中在兼容性与缺陷:
- Composer 声明兼容 Laravel 10 / 11 / 12,同时保留 Laravel 5.5~9 的依赖范围;
- 修复 PHP 8.4 隐式 nullable 弃用,并保持 PHP 7.4 语法兼容;
- 同时兼容 Flysystem 1 和 Flysystem 3 的资源发布流程;
- 加固插件 ZIP 安装:只允许可信本地包,阻止路径穿越和非法包名目录逃逸;
- 加固插件元数据输出,限制外链协议并转义作者、主页和 Logo 属性;
- 修复插件版本增量计算、重复卸载和命令退出码,以及
LazyRenderable未提供payload()时的致命调用。
CI 的发布兼容矩阵是 Laravel 8~12,Dusk 覆盖 Laravel 8 和 12。Laravel 5.5~7 属于声明范围内的遗留兼容,不作为发布门禁。
二、Kit:把后台里反复要写的东西做成组件
基座负责框架本身,具体项目的组件不该塞回基座。woodynew/dcat-admin-kit 收的是「业务无关、哪个后台都用得上」的那些交互。
目前 14 个组件:
| 命名空间 | 组件 |
|---|---|
Actions\Form |
Copy、TopGoBack、TopSubmit |
Grid\Actions |
TextActions |
Grid\Displayers |
AfterLimit、CopyQrCodeLink、MultiRow、TextAlert |
Grid\Tools |
AdminGridHrefTool、GridFormTool |
Grid\RowActions |
OpenIFrameTab、GridModalRowAction |
Widgets |
PostTable |
Support |
AdminFormUtil |
列别名的注册不依赖 Dcat 扩展记录是否启用,包一加载就能用:
$grid->column('url')->copyqrcodelink();
$grid->column('summary')->multirow(['name', 'status']);
$grid->column('payload')->textalert(50);
$grid->column('content')->afterlimit(100);
列显示器:让一列信息更好读

二维码弹窗、复制完整内容、多字段合并、长文本弹窗、尾部截取展开。截图里的 Grid 用的是真实数据,中文、引号、<img src=x onerror=...> 这类特殊字符和空值都在同一张表里,可以直接看到转义行为。

二维码现在只显示图本身,没有标题栏和关闭按钮,点外部、按 Esc、再点一次触发器都能关。width / height 通过插件的 size 选项生效,第五个参数 $quiet 控制静区宽度,默认 2 保持边框窄,需要打印或重度缩放时可以用 4。
复制行为从「每次点击都弹原文 tooltip」改成了短暂的 toast 结果提示:

每个示例都带正在运行的源码
演示站的每个组件卡片下方是从当前执行方法用 Reflection 提取的真实源码,源码跟着实现一起更新,不是手抄的文档片段:

表单与行操作
TopSubmit 触发表单内原生 submit,走同一套校验和保存流程;GridFormTool 把一张表单挂到表格工具栏上;GridModalRowAction 做行内弹窗表单,提交后在事务里写业务数据和操作日志:


PostTable 用来把操作结果摆出来,多个实例用独立 DOM ID:

全局特性开关,默认全关
全局行为一律默认关闭,按需在 config/dcat-admin-kit.php 打开:
return ['features' => [
'grid_defaults' => false,
'form_defaults' => false,
'show_defaults' => false,
'right_side_filter' => false,
'top_form_tools' => false,
'back_to_top' => false,
'grid_assets' => false,
'global_styles' => false,
'locale_switcher' => false,
]];
演示站的对照页比较其中 8 项,locale_switcher 在演示站里整站常开,不参与对照。每次只翻转一个开关,用一次新请求看真实组件变化,不影响其他访客的配置:

包不从 CDN 加载运行时资源,CSS、JS、视图和图片都从包内发布。
多语言:内置简中、繁中和英文
locale_switcher 默认关闭,开启后右上角出现一个语言选择框,选择存在当前 Session 里,后台页面、AJAX、PJAX 和同源 iframe 请求都跟随 Laravel 当前语言:


边界说清楚:Kit 负责切换和自身组件的文案,各扩展和应用维护自己的翻译。切换器不会自动翻译写死的菜单、页面标题或业务数据。菜单可以在渲染时翻译,不改数据库里存的名字。
三、iframe 多标签页
z-dcat-iframe-tab 给 Dcat 补上 iframe 架构和标签页管理:双击关闭、标签过多时滚轮选择或按住拖动、右键菜单(关闭所有 / 关闭其他 / 刷新当前 / 复制标签页链接)。
它内置 zh_CN、zh_TW、en 语言包,右键菜单和关闭提示跟随当前语言,不装 Kit 也能用。

Kit 的 OpenIFrameTab 会和它集成;没装这个包时安全降级成普通跳转,不会报错。
四、演示站:每个组件都能点,源码能复制
上面的截图全部来自演示站,它是真实 Laravel 12 应用,不是静态页面:
- 运行环境 Laravel 12 + PHP 8.4 + SQLite;
- 首页一键进入受限演示账号,不需要账号密码;
- 列显示器、操作与工具、共享记录、组件、全局特性、标签页实验室六个场景;
- 共享记录可以真的新建、编辑、复制,操作日志和余额变化都写进 SQLite;
- 每个示例附参数说明、使用建议和反射提取的实际源码。


一键启动
宿主机不用装 PHP、Composer 或 Node:
git clone https://github.com/woodynew/dcat-admin-kit-demo.git
cd dcat-admin-kit-demo
docker compose up -d --build --wait
然后打开 localhost:18085。容器会自动初始化 SQLite 和扩展、生成持久密钥,并起一个每小时重置演示数据的调度器。
想本地跑也可以:
composer install
cp .env.example .env
php artisan key:generate
php artisan demo:install
php artisan serve --host=127.0.0.1 --port=18084
demo:install 可以重复执行,保留已有记录和配置,补齐安装所需的数据与资源;它和重置命令不是一回事。
演示站是共享空间:记录上限 200 条,日志保留最近 500 条,每个 IP 每分钟最多写 30 次,每小时整点重置。所以别往里录真实资料。
安装 Kit
composer require woodynew/dcat-admin-kit
php artisan dcat-admin-kit:install
安装命令只做四件事:确认 Dcat 已经装好、发布 Kit 配置(不覆盖已有文件)、安装扩展版本和本地资源、启用扩展。它不会执行 admin:install,也不会建业务表。
完整中文文档从 docs/README.md 开始,包含安装、全局配置、每个组件的参数与接入示例,以及二次扩展约定。
版本与兼容
| 项目 | 当前版本 | 环境 |
|---|---|---|
woodynew/dcat-laravel-admin |
2.2.4 | PHP >= 7.1,Laravel 5.5~12 声明 |
woodynew/dcat-admin-kit |
0.2.3 | PHP 7.4 / 8.x,Laravel 8~12 |
woodynew/z-dcat-iframe-tab |
1.3.1 | PHP >= 7.2.5 |
| 演示站 | — | PHP 8.4 + Laravel 12 |
Kit 保留 Laravel 8~11 是为了让老项目能用,新项目直接用当前受支持的 Laravel 版本就好。
上游、作者与出处
这个项目组的定位是维护和补全,所以出处尽量写全。
Dcat Admin(原项目)
作者与版权持有者:Jiang qinghua、Jens Segers,原版权声明为
Copyright (c) 2019 Jiang qinghua, Jens Segers许可证:MIT
它自身基于 z-song/laravel-admin
woodynew/dcat-laravel-admin 是上面 2.0 分支的维护型 fork,保留原 Dcat\Admin\ 命名空间、原 MIT License 和贡献者归属;我新增的修改同样按 MIT 分发。复制、修改或再分发时,请保留原版权声明和许可文本。
woodynew/z-dcat-iframe-tab 是 iframe 标签页扩展的维护版本,保留原作者的版权声明 Copyright (c) 2019 Chen TaiHong, Jasper Chen,同样按 MIT 分发。
woodynew/dcat-admin-kit 和演示站是新的通用组件与示例代码,同样 MIT。Kit 打包的 jQuery NiceScroll 3.7.6 属于第三方组件(Copyright (c) 2011-17 InuYaksa,MIT),保留其许可证头,记录在仓库的 THIRD_PARTY_NOTICES.md。
前端基础还包括 Laravel、Laravel Admin、AdminLTE、Bootstrap、jQuery、Font Awesome、PJAX、Layer、Toastr 等,各自遵循其自身许可证。
最后说清楚边界
这三个包不做业务 CRUD 生成器,也不替代 Dcat Admin 中文文档;
基座是维护型 fork,不是重写,上游的 API 和目录结构都保留;
Demo 里有两处只属于演示应用的适配(
AdminGridHrefTool的链接渲染、iframe 请求下的紧凑布局),没有改已发布的依赖包;演示里的二维码示例用的是默认 200×200,Kit 的
width/height/quiet参数可以自定义尺寸和静区宽度。
有问题或者想加组件,欢迎到对应仓库提 issue。
本作品采用《CC 协议》,转载必须注明作者和本文链接
关于 LearnKu
推荐文章: