zxf / xfadmin
XfAdmin - 基于 INSPINIA v4.1.0 的 PHP 管理后台组件化扩展包(99 个组件)。将后台模板拆分为可独立调用的布局/表格/表单/图表/UI 组件,支持数据渲染与按需去重加载资源,纯原生 JS(不依赖 Node.js)、离线可用,支持 Laravel 11/12 与 ThinkPHP 8+。
Requires
- php: >=8.2
- ext-json: *
Requires (Dev)
- phpunit/phpunit: ^10.0
Suggests
- laravel/framework: ^11.0|^12.0 - 在 Laravel 11+ 中自动注册服务提供者、Blade 指令与资源发布
- topthink/framework: ^8.0 - 在 ThinkPHP 8+ 中自动注册服务与助手函数
This package is auto-updated.
Last update: 2026-07-24 09:53:54 UTC
README
基于 INSPINIA v4.1.0 后台模板拆分的 PHP 组件化后台 UI 扩展包 · 99 个组件 · 纯原生 JS(不依赖 Node 构建)· 离线可用 · 支持 Laravel 11/12 与 ThinkPHP 8+ · 要求 PHP ≥ 8.2
XfAdmin 把 INSPINIA 后台模板的布局、导航、表格、表单、图表、UI 与业务组件全部拆分为
可独立调用的 PHP 类。每个组件 XfAdmin::card([...]) 即渲染一段语义化、可嵌套、资源自管理的 HTML,
让你在任意 PHP 项目中“一行代码”拼出完整后台界面。
echo XfAdmin::page([ 'title' => '仪表盘', 'content' => XfAdmin::card(['title' => '欢迎', 'body' => 'Hello XfAdmin']), ]);
✨ 特性
- 纯 PHP 组件化:每个 UI 元素都是一个 PHP 类,返回
(string)即 HTML,无模板引擎强绑定。 - 99 个组件全覆盖:布局、导航、栅格、卡片、表格、表单、图表、UI、业务/数据组件、杂项, 并完整覆盖 INSPINIA 后台约 220 个页面(见 页面映射)。
- 按需加载 + 自动去重:组件声明自身依赖的 CSS/JS,同一资源在一个页面内最多加载一次(见 资源与去重)。
- 离线可用:所有第三方插件(jQuery、Bootstrap 5、DataTables、ApexCharts、Tagify、FullCalendar…)均随包内置,不请求外网。
- 任意嵌套互不干扰:组件通过唯一 ID / 作用域隔离,可无限层级混用。
- 数据驱动:所有组件接受标准 PHP 数组,自动渲染、填充、绑定事件。
- 主题可定制:外观由
config.js在浏览器端持久化,无需重新编译;亦可在后端覆盖theme/brand配置。 - 安全优先:所有动态文本默认经
Html::e()转义;内联 JSON 经Html::scriptJson()转义, 从源头杜绝 XSS(见 安全与转义规范)。 - 框架无关核心:渲染核心不依赖任何框架,Laravel / ThinkPHP 仅做服务注册与资源发布。
📦 组件一览(共 99 个)
完整参数与示例见 组件总览。
| 分类 | 数量 | 组件 |
|---|---|---|
| 布局与页面 | 13 | page authPage errorPage comingSoon maintenance emptyState lockScreen sidenav topbar topnav pageTitle footer customizer |
| 导航 | 1 | menu |
| 栅格 | 2 | row col |
| 卡片与统计 | 3 | card statCard widget |
| 表格 | 2 | table dataTable |
| 表单 | 14 | form input textarea select check slider dateRangePicker editor upload colorPicker tags maskedInput wizard passwordStrength |
| 图表与地图 | 4 | apexChart eChart vectorMap leafletMap |
| UI 组件 | 30 | alert badge button dropdown modal offcanvas tabs accordion progress spinner pagination listGroup avatar icon toast timeline carousel breadcrumb tooltip popover placeholder collapse scrollspy ratio rating ribbon chip stepper descriptionList loadingButton |
| 业务 / 数据 | 19 | pricingCard faq profileHeader productCard kanban chatBox invoiceTable mailList fileManager activityFeed gallery blogList invoiceList searchResults permissionMatrix apiKeys commentThread emailCompose |
| 杂项 | 12 | calendar treeView nestable lightbox tour clipboardButton sweetAlert raw tinycon idleTimer pdfViewer textDiff |
组件别名:
dateRange/dateRangePicker、clipboard/clipboardButton互为别名,调用任一均可。
🚀 快速开始
安装
composer require zxf/xfadmin
Laravel 11 / 12
服务提供者与门面通过 extra.laravel 自动注册。发布静态资源与配置:
php artisan vendor:publish --tag=xfadmin-assets # 发布到 public/zxf/xfadmin php artisan vendor:publish --tag=xfadmin-config # 发布配置(可选)
在控制器中:
use zxf\XfAdmin\XfAdmin; public function index() { return response(XfAdmin::page([ 'title' => '仪表盘', 'layout' => 'vertical', 'content' => XfAdmin::card(['title' => '欢迎', 'body' => 'Hello XfAdmin']), ])); }
在 Blade 中:
{!! XfAdmin::page(['title' => '首页', 'content' => $html]) !!}
ThinkPHP 8
在 config/service.php 注册服务:
return [ \zxf\XfAdmin\ThinkPHP\Service::class, ];
发布资源:
php think xfadmin:publish
原生 PHP(独立使用)
参考 demo/ 目录:配置 XfAdmin::config() 后直接 echo XfAdmin::page([...]) 即可,无需框架。
运行演示(资源会自动从 /zxf/xfadmin 前缀自托管,无需发布):
php -S 127.0.0.1:8900 demo/index.php # 直接运行 # 或:php -S 127.0.0.1:8900 demo/router.php
若浏览器中 CSS/JS 全部 404,请检查资源前缀是否为 /zxf/xfadmin,以及资源是否发布/自托管(见
资源与去重机制 · 排错)。
🧱 核心概念
1. 组件即方法
XfAdmin::<组件名>(array $options) 返回一个组件对象,(string) 转换或 echo 时渲染为 HTML。
$card = XfAdmin::card(['title' => '标题', 'body' => '内容']); echo $card; // 渲染 $html = (string) $card; // 取字符串 $card->render(); // 显式渲染
2. 组件可嵌套
任何接受 HTML 的字段(body / content / footer …)都能直接塞入另一个组件:
echo XfAdmin::card([ 'title' => '用户列表', 'body' => XfAdmin::dataTable([ 'columns' => ['ID', '姓名', '邮箱'], 'data' => $users, ]), ]);
3. 数据驱动
所有列表型组件接受统一结构的数组,例如菜单:
['text' => '菜单', 'icon' => 'ti ti-x', 'url' => '/x', 'badge' => ['text' => '9', 'class' => 'bg-danger'], 'children' => [...]]
4. 资源自动管理
组件在渲染时把自身所需的 CSS/JS 登记到全局资源管理器。整页组件(page / authPage)会在
<head> 与页尾统一输出并自动去重。手动布局时用:
echo XfAdmin::assets()->head(); // 放入 <head> // ... 你的内容 ... echo XfAdmin::assets()->scripts(); // 放在 </body> 前
5. 门面全局方法
除渲染组件外,门面还提供:config() page() component() extend() has() componentList()
version() asset() head() scripts() html()。例如:
XfAdmin::has('dataTable'); // 是否已注册 XfAdmin::version(); // '1.0.0' XfAdmin::asset('css/xfadmin.css'); // /zxf/xfadmin/css/xfadmin.css?v=1.0.0
🎨 主题与资源
外观(skin / mode / layout)由 config.js 在浏览器端持久化;资源路径 assets_url 可在配置中
改为 CDN 前缀,所有资源 URL 自动附加 ?v={version} 做缓存刷新。详见 资源与去重机制。
🔒 安全模型
所有动态文本默认转义,内联脚本数据经 HEX 转义,前端对用户输入再做二次转义,形成纵深防御。 暴露给 JS 的 API 仅接受可信数据。详见 安全与转义规范。
🧩 扩展自定义组件
继承 zxf\XfAdmin\Component 实现 render(),调用 XfAdmin::extend('myWidget', MyWidget::class) 即可像内置组件一样使用。
Laravel 用户可注册 Blade 指令与服务提供者。详见 自定义与扩展 与 ThinkPHP 集成。
📚 文档
| 文档 | 说明 |
|---|---|
| 组件总览 | 全部 99 个组件的参数、事件与门面全局方法 |
| 组件详细参考 | 每个组件的数据输入/输出、前端控件(data-xf)与可复制用法示例 |
| 布局与页面 | page / authPage / errorPage 等整页骨架与布局变体 |
| 表格 | 静态 table 与全功能 dataTable |
| 表单 | 字段、富文本、上传、向导、密码强度等 |
| 图表 | ApexCharts / ECharts / 矢量地图 / Leaflet |
| 资源与去重机制 | 资源加载、去重、版本号与 CDN |
| 安全与转义规范 | XSS 防护与转义助手 |
| 自定义与扩展 | 编写并注册自定义组件、Laravel 集成 |
| ThinkPHP 集成 | ThinkPHP 8 安装、发布与用法 |
| 页面映射 | INSPINIA 页面 → 组件覆盖矩阵 |
| 更新日志 | 版本迭代记录 |
🌐 浏览器兼容
支持 Chrome / Edge / Firefox / Safari 的最新 2 个稳定版本。不兼容 IE(依赖 Bootstrap 5 与现代 DOM API)。
🆕 更新日志
见 CHANGELOG.md。
📄 许可
MIT © zxf