Skip to content

nobbyte/webman-starter

Repository files navigation

Webman Starter

Webman PHP License Build

基于 Webman 的现代化、高性能后台管理系统脚手架

持续迭代优化的前后端分离中后台管理系统框架。重视每一处代码规范,重视每一种解决方案细节,持续提供舒适后端开发体验。

采用分层架构、模块化设计,提供完整的 RBAC 权限管理和 RESTful API

快速开始在线文档架构设计开发指南


项目起源

最近,我关注到一个名为 ContiNew Admin 的项目,它规范的设计和优雅的实现,让我对理想的开发实践有了更深的思考,但也遗憾它不是基于 PHP 开发的。

从业多年,我接触过形形色色的框架,却始终未能找到一款能完全契合我心中“艺术品”标准的。很多人认为“能用就行”,这固然有其道理,但我始终坚信,代码不仅是实现功能的工具,更应是值得雕琢的艺术品。

我看来,PHP 近年面临的挑战,并非语言本身问题,更多是市场环境与开发者生态的问题。如果每一位 PHP 开发者都能追求卓越,拥抱语言的新特性,编写出思想深邃、结构优雅的代码,我们完全有能力让 PHP 生态重焕生机,赢得市场的尊重。

现如今有Webman如此强大且易于上手的框架出世,这让我们有了更好的选择

正是基于这样的思考,我决定发起一个新项目。我们无需重复造轮子,但当缺少一个足够称心的轮子时,便可以亲手打造一个。

目前,项目尚处于基础脚手架阶段,但我计划持续投入,将其打磨完善。在此,我诚挚地邀请各位志同道合、时间充裕的伙伴加入,一同将它构建成我们理想中的模样。

如果你发现这个项目的架构设计有不合理、或不是你喜欢的、或者不是最佳实践方式,我希望你能提出宝贵的意见和建议。

✨ 项目特色

🚀 高性能架构

  • 基于 Webman: 高性能 HTTP 服务框架,支持高并发
  • 异步非阻塞: 基于 Workerman 的事件驱动架构
  • 内存常驻: 避免重复加载,大幅提升性能

🏗️ 现代化设计

  • 分层架构: Controller → Service → Repository → Model 清晰分层
  • 组合优于继承: 广泛使用 Trait 实现功能复用
  • 约定大于配置: 统一的命名规范和开发约定

🔐 完整权限系统

  • JWT 认证: 基于 lcobucci/jwt 的无状态认证
  • RBAC 权限: 用户-角色-菜单的完整权限体系
  • 细粒度控制: 支持菜单级别的权限控制

🛠️ 开发友好

  • 快速开发: 通过 Trait 实现分钟级 CRUD 开发
  • 代码复用: 公共组件高度抽象,易于扩展
  • 规范统一: 完整的开发规范和代码注释

📋 功能特性

功能模块 描述 状态
🔐 用户认证 JWT 登录/退出/刷新
👥 用户管理 用户 CRUD、角色分配
🎭 角色管理 角色 CRUD、权限分配
📋 菜单管理 树形菜单、权限控制
👤 个人中心 个人信息、密码修改
🔒 权限控制 基于角色的访问控制
📱 验证码 图片/短信验证码
🌐 跨域支持 CORS 中间件
📝 API 文档 完整的接口文档

🛠️ 技术栈

后端技术

  • 框架: Webman 2.1+ (基于 Workerman)
  • 语言: PHP 8.1+
  • 数据库: MySQL 5.7+
  • ORM: ThinkORM
  • 认证: JWT (lcobucci/jwt)
  • 验证码: webman/captcha
  • 缓存: webman/cache

开发工具

  • 包管理: Composer
  • 代码规范: PSR-4 自动加载
  • 日志: Monolog
  • 调试: 内置调试工具

🚀 快速开始

环境要求

  • PHP >= 8.1
  • MySQL >= 5.7
  • Composer
  • 扩展: ext-json, ext-pdo, ext-pdo_mysql

安装步骤

  1. 克隆项目
git clone https://github.com/your-username/webman-starter.git
cd webman-starter
  1. 安装依赖
composer install
  1. 配置数据库
`config/think-orm.php`
  1. 导入数据库
`database.sql`
  1. 启动服务
# 开发模式
php start.php start

# 生产模式
php start.php start -d
  1. 访问应用

📖 API 文档

完整的 API 文档请查看 API.md

快速测试

# 登录获取 Token
curl -X POST http://localhost:8787/auth/login \
  -H "Content-Type: application/json" \
  -d '{"username":"admin","password":"123456"}'

# 获取用户列表
curl -X GET http://localhost:8787/system/user \
  -H "Authorization: Bearer YOUR_TOKEN_HERE"

🏗️ 架构设计

核心理念

  1. 服务为核心: Service 层是业务逻辑的唯一入口
  2. 组合优于继承: 使用 Trait 实现功能混入
  3. 精简专注的分层: 每层职责明确,代码简洁
  4. 约定与效率: 统一命名规范,快速开发

分层架构

┌─────────────────┐
│   Controller    │  HTTP 请求处理
├─────────────────┤
│    Service      │  业务逻辑处理
├─────────────────┤
│   Repository    │  数据访问层
├─────────────────┤
│     Model       │  数据模型
└─────────────────┘

目录结构

app/
├── common/                     # 公共模块
│   ├── enums/                 # 枚举类
│   ├── exception/             # 异常处理
│   ├── middleware/            # 中间件
│   ├── model/                 # 基础模型
│   ├── repository/            # 基础仓储
│   └── traits/                # 公共 Trait
│
└── system/                    # 系统模块
    ├── controller/           # 控制器
    ├── model/               # 模型
    ├── repository/          # 仓储
    ├── service/             # 服务
    ├── validate/            # 验证器
    └── route.php            # 路由定义

核心组件交互流程

以创建用户为例,展示各层之间的交互:

sequenceDiagram
    participant Client as 客户端
    participant Controller as 控制器
    participant Service as 服务层
    participant Validate as 验证器
    participant Repository as 仓储层
    participant Model as 模型

    Client->>Controller: POST /system/user
    Controller->>Service: create(userData)
    Service->>Validate: check(userData)
    Validate-->>Service: 验证通过
    Service->>Repository: create(processedData)
    Repository->>Model: Model::create()
    Model-->>Repository: 返回创建结果
    Repository-->>Service: 返回数据
    Service-->>Controller: 返回结果
    Controller-->>Client: JSON 响应
Loading

🔧 开发指南

创建新模块 Custom

  1. 创建模型
<?php
namespace app\custom\model;

use app\common\model\BaseModel;

class Product extends BaseModel
{
    protected $table = 'products';
    
    // 定义关联关系
}
  1. 创建仓储
<?php
namespace app\custom\repository;

use app\common\repository\BaseRepository;
use app\system\model\Product;

class ProductRepository extends BaseRepository
{
    public function __construct()
    {
        $this->model = new Product();
    }
    
    // 自定义查询方法
}
  1. 创建服务
<?php
namespace app\custom\service;

use app\common\traits\Crud;
use app\system\repository\ProductRepository;

class ProductService
{
    use Crud;
    
    public function __construct()
    {
        $this->repository = new ProductRepository();
        $this->validate = new ProductValidate();
    }
}
  1. 创建控制器
<?php
namespace app\custom\controller;

use app\common\traits\ApiResponse;
use app\system\service\ProductService;

class Product
{
    use ApiResponse;
    
    protected $service;
    
    public function __construct()
    {
        $this->service = new ProductService();
    }
    
    public function list(Request $request)
    {
        $result = $this->service->list($request->all());
        return $this->success($result);
    }
}

开发规范

命名规范

  • 类名: 大驼峰命名 (PascalCase)
  • 方法名: 小驼峰命名 (camelCase)
  • 常量: 全大写下划线分隔 (UPPER_SNAKE_CASE)
  • 数据库: 小写下划线分隔 (snake_case)

方法约定

  • list(): 获取列表(支持分页)
  • find($id): 获取详情
  • create($data): 创建记录
  • update($id, $data): 更新记录
  • delete($id): 删除记录

响应格式

// 成功响应
return $this->success($data, '操作成功');

// 失败响应
return $this->error('操作失败', ApiResponseEnum::ERROR);

扩展开发

添加中间件

<?php
namespace app\common\middleware;

use Webman\MiddlewareInterface;
use Webman\Http\Response;
use Webman\Http\Request;

class CustomMiddleware implements MiddlewareInterface
{
    public function process(Request $request, callable $handler): Response
    {
        // 前置处理
        $response = $handler($request);
        // 后置处理
        return $response;
    }
}

自定义验证器

<?php
namespace app\custom\validate;

use think\Validate;

class CustomValidate extends Validate
{
    protected $rule = [
        'name' => 'require|max:50',
        'email' => 'require|email',
    ];

    protected $message = [
        'name.require' => '名称不能为空',
        'email.email' => '邮箱格式不正确',
    ];
}

添加路由

// 在 app/system/route.php 中添加
Route::group('/custom', function () {
    Route::get('', [app\system\controller\Custom::class, 'list']);
    Route::post('', [app\system\controller\Custom::class, 'create']);
});

🚀 部署

生产环境部署

  1. 配置优化
# 启用 OPcache
echo "opcache.enable=1" >> /etc/php/8.1/fpm/php.ini

# 配置进程数
# 编辑 start.php 设置合适的 worker 数量
  1. Nginx 配置
server {
    listen 80;
    server_name your-domain.com;
    root /path/to/webman-starter/public;

    location / {
        proxy_pass http://127.0.0.1:8787;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
  1. 进程管理
# 使用 systemd 管理进程
sudo systemctl enable webman-starter
sudo systemctl start webman-starter

🔗 相关链接

📄 许可证

本项目基于 MIT 许可证开源。

� 更新日志

v1.0.0 (2024-01-01)

  • ✨ 初始版本发布
  • ✅ 完整的 RBAC 权限系统
  • ✅ JWT 认证机制
  • ✅ RESTful API 设计
  • ✅ 分层架构实现
  • ✅ 完整的 CRUD 操作
  • ✅ 验证码功能
  • ✅ 个人中心模块
  • ✅ 跨域支持
  • ✅ 完整的 API 文档

计划中的功能

  • 🔄 扩展插件系统
  • 🔄 文件上传功能
  • 🔄 邮件服务集成
  • 🔄 Redis 缓存支持
  • 🔄 操作日志记录
  • 🔄 数据权限控制
  • 🔄 API 限流功能
  • 🔄 Swagger 文档集成
  • 🔄 单元测试覆盖

�🙏 致谢

如果这个项目对你有帮助,请给个 ⭐️ Star 支持一下!

About

基于 Webman 的现代化、高性能后台管理系统脚手架。持续迭代优化的前后端分离中后台管理系统框架。重视每一处代码规范,重视每一种解决方案细节,持续提供舒适后端开发体验。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages