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

AI摘要
【内容总结】 本文属技术知识分享,介绍作者为 Dcat Admin 2.x 构建的三层维护方案:兼容 Laravel 10-12 的基座 fork、含14个通用组件的 Kit 扩展包,以及基于 Laravel 12 的可交互演示站,并说明安装方式、版本兼容与开源许可归属。

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-adminjqhph/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 CopyTopGoBackTopSubmit
Grid\Actions TextActions
Grid\Displayers AfterLimitCopyQrCodeLinkMultiRowTextAlert
Grid\Tools AdminGridHrefToolGridFormTool
Grid\RowActions OpenIFrameTabGridModalRowAction
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_CNzh_TWen 语言包,右键菜单和关闭提示跟随当前语言,不装 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(原项目)

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 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!