🚀 前后端不分离的 PHP 解决方案
基于 dux-lite 和 DVHA 的企业级管理系统开发框架
- 🚀 开箱即用 - 集成用户管理、权限控制、数据管理等核心功能,无需从零开始搭建
- ⚡ 运行时编译 - 修改 Vue 文件后刷新页面即可看到效果,无需 webpack、vite 等前端工具链
- 🎯 前后端一体化 - Vue 文件和 PHP 代码放在一起,就像传统 PHP 开发一样简单直观
- 🔐 完整权限系统 - 用户管理、角色管理、部门管理、菜单管理,细粒度权限控制
- 📊 动态数据管理 - 可视化表单设计器、动态表格配置、自动生成 RESTful API
- 🎨 现代化技术栈 - PHP 8.2+ + Vue 3 + Naive UI + TypeScript,享受最新技术带来的开发体验
- 🌐 国际化支持 - 完整的多语言解决方案,支持自定义语言包和时区配置
- 🛠️ 丰富的功能 - 文件管理、日志系统、缓存系统、API 文档等完整的后台管理功能
flowchart TD
subgraph 前端层["🎨 前端层"]
Vue3["Vue 3"]
NaiveUI["Naive UI"]
TypeScript["TypeScript"]
DVHA["DVHA 框架"]
end
subgraph 后端层["⚡ 后端层"]
DuxLite["Dux Lite 框架"]
权限系统["🔐 权限系统"]
数据管理["📊 数据管理"]
文件系统["💿 文件系统"]
API接口["📡 API 接口"]
end
subgraph 基础设施["🔧 基础设施层"]
MySQL["MySQL 8.0+"]
Redis["Redis"]
Nginx["Nginx"]
PHP["PHP 8.2+"]
end
前端层 --> 后端层
后端层 --> 基础设施
style 前端层 fill:#e1f5fe
style 后端层 fill:#f3e5f5
style 基础设施 fill:#e8f5e8
| 功能模块 | 功能描述 | 特点 |
|---|---|---|
| 👥 用户管理 | 用户注册、登录、个人信息管理 | 支持多种登录方式 |
| 🔐 权限系统 | 角色权限、菜单权限、数据权限 | 细粒度权限控制 |
| 🏢 部门管理 | 组织架构、部门层级管理 | 树形结构管理 |
| 📊 数据管理 | 动态表单、数据表格、数据统计 | 可视化配置 |
| 📁 文件管理 | 文件上传、存储、预览、下载 | 支持多种存储方式 |
| 📝 日志系统 | 操作日志、系统日志、错误日志 | 完整的审计追踪 |
| ⚙️ 系统配置 | 系统参数、邮件配置、存储配置 | 动态配置管理 |
| 🌐 多语言 | 界面多语言、数据多语言 | 国际化支持 |
以下步骤基于「快速开始」文档精简而来,完整说明请查看文档: https://github.com/duxweb/dux-php-admin-docs/blob/main/guide/getting-started.md
- PHP: 8.2+
- Composer: 2.0+
- 数据库: MySQL 8.0+ / PostgreSQL 13+ / SQLite 3.0+
- Web 服务器: Nginx 1.20+ / Apache 2.4+
- PHP 扩展(必需): pdo、对应数据库驱动(pdo_mysql/pdo_pgsql/pdo_sqlite)、mbstring、json、curl、zip、xml
- PHP 扩展(推荐): opcache、gd
优先使用 Composer 创建项目:
# 创建并进入项目
composer create-project duxweb/dux-php-admin my-admin
cd my-admin或从 Git 克隆源码:
git clone https://github.com/duxweb/dux-php-admin.git my-admin
cd my-admin
composer install编辑 config/use.toml(示例):
[app]
name = "Dux PHP Admin"
debug = true
timezone = "Asia/Shanghai"
secret = "your-32-character-secret-key-here"
domain = "http://localhost:8000"配置数据库 config/database.toml(MySQL 示例):
[db.drivers.default]
driver = "mysql"
host = "127.0.0.1"
port = 3306
database = "dux_admin"
username = "root"
password = "your_password"
prefix = "app_"# 同步数据库与菜单结构
php dux db:sync
php dux menu:sync
# 启动开发服务器(PHP 内置服务)
php -S localhost:8000 -t public打开浏览器访问:
- 系统首页: http://localhost:8000 (404 的话则没有前台应用)
- 管理后台: http://localhost:8000/manage
1、访问应用商店 2、选择需要安装的模块 3、通过命令运行安装,比如 CMS 模块:
php dux add duxweb/cms
4、同步数据库与菜单:
# 针对模块同步
php dux db:sync cms
php dux menu:sync cms
# 全部同步
php dux db:sync
php dux menu:sync
5、访问后台刷新页面即可显示模块菜单。
执行下面命令更新后端系统与模块:
php dux update
执行下面命令更新前端基座:
# 更新前端依赖
bun update
# 重新编译基座
bun run build
<?php
// app/Demo/Api/Hello.php
namespace App\Demo\Api;
use Core\Attribute\RouteGroup;
use Core\Attribute\Route;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\ResponseInterface;
#[RouteGroup(app: 'api', route: '/hello')]
class Hello
{
#[Route(methods: 'GET', route: '')]
public function index(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface
{
return send($response, '获取成功', ['message' => 'Hello Dux PHP Admin!']);
}
#[Route(methods: 'POST', route: '')]
public function create(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface
{
$data = Validator::parser($request->getParsedBody(), [
"name" => ["required", '姓名不能为空'],
"email" => ["required", "email", '邮箱格式不正确'],
]);
return send($response, '创建成功', $data->toArray());
}
}<!-- app/Demo/Admin/User.vue -->
<script setup lang="ts">
import { onMounted, ref } from 'vue'
const columns = [
{ key: 'id', title: 'ID', width: 80 },
{ key: 'name', title: '姓名' },
{ key: 'email', title: '邮箱' },
{ key: 'created_at', title: '创建时间' }
]
const data = ref([])
const loading = ref(false)
async function loadData() {
loading.value = true
try {
const response = await fetch('/api/users')
data.value = await response.json()
}
finally {
loading.value = false
}
}
onMounted(() => {
loadData()
})
</script>
<template>
<DuxPage>
<DuxPageHeader title="用户管理" />
<DuxPageBody>
<DuxTable
:columns="columns"
:data="data"
:loading="loading"
@refresh="loadData"
/>
</DuxPageBody>
</DuxPage>
</template><?php
// 使用验证器验证数据
use Core\Validator\Validator;
$data = Validator::parser($request->getParsedBody(), [
"name" => ["required", '姓名不能为空'],
"email" => ["required", "email", '邮箱格式不正确'],
"age" => ["required", "integer", "min", 18, '年龄必须大于18岁'],
"password" => ["required", "lengthMin", 6, '密码至少6位'],
]);
// 验证通过后使用数据
$user = User::create($data->toArray());<?php
// 在控制器中检查权限
use Core\Attribute\Permission;
#[RouteGroup(app: 'admin', route: '/users')]
class UserController
{
#[Route(methods: 'GET', route: '')]
#[Permission('user.index')]
public function index(): ResponseInterface
{
// 只有拥有 user.index 权限的用户才能访问
$users = User::paginate(15);
return send($response, '获取成功', $users);
}
#[Route(methods: 'POST', route: '')]
#[Permission('user.create')]
public function store(): ResponseInterface
{
// 只有拥有 user.create 权限的用户才能创建
// ...
}
}Dux PHP Admin 提供了强大的命令行工具来提升开发效率:
# 查看所有可用命令
php dux
# 项目初始化
php dux install # 初始化项目
php dux serve # 启动开发服务器
# 数据库相关命令
php dux db:sync # 同步数据库结构
php dux db:backup # 备份数据库
php dux db:restore # 恢复数据库
# 权限管理命令
php dux permission:sync # 同步权限数据
# 缓存管理命令
php dux cache:clear # 清理缓存
# 路由管理命令
php dux route:list # 查看所有路由推荐使用 FlyEnv 作为本地开发环境:
- 下载并安装 FlyEnv
- 启动 Nginx 和 MySQL 服务
- 配置虚拟主机指向项目
public目录
# docker-compose.yml
version: '3.8'
services:
app:
build: .
ports:
- '80:80'
volumes:
- ./data:/var/www/html/data
environment:
- APP_ENV=production
depends_on:
- db
- redis
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
MYSQL_DATABASE: ${DB_NAME}
volumes:
- mysql_data:/var/lib/mysql
redis:
image: redis:7-alpine
volumes:
- redis_data:/data
volumes:
mysql_data:
redis_data:- 安装宝塔面板:访问 https://www.bt.cn/ 获取最新安装脚本
- 安装 LNMP 环境(Nginx + MySQL + PHP 8.2+)
- 创建网站,设置运行目录为
public - 配置 Nginx 伪静态规则
详细部署说明请参考:部署指南
| 项目名称 | 描述 | 链接 |
|---|---|---|
| Dux Lite | 轻量级 PHP 框架 | GitHub |
| DVHA | Vue 3 管理系统框架 | 文档 |
| DVHA Pro | 专业版管理系统组件 | 文档 |
我们欢迎所有形式的贡献!请查看 贡献指南 了解如何开始。
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 创建 Pull Request
在提交代码前,请确保:
- 代码符合 PSR-12 编码规范
- 添加了必要的测试用例
- 更新了相关文档
- 通过了所有测试
感谢所有为 DuxLite 做出贡献的开发者们!
- 📧 邮箱: [email protected]
- 🌐 官网: https://www.dux.cn
- 🐛 问题反馈: GitHub Issues
- 💡 功能建议: GitHub Discussions
本项目基于 MIT 协议开源,您可以自由使用、修改和分发。
DuxWeb 团队
- 🌐 官网: https://www.dux.cn
- 📧 邮箱: [email protected]
- 🐙 GitHub: @duxweb
如果这个项目对您有帮助,请给我们一个 ⭐️!
您的支持是我们持续改进的动力。
🎉 感谢使用 Dux PHP Admin!