当前位置: 首页 > article >正文

做一个开源完整流程=hyperf 服务脚手架 Starter Kit

---1)目标定义开源仓库定位 仓库名建议hyperf-starter-kit 定位开箱即用的 Hyperf API 服务脚手架内置 - 健康检查 - 统一响应结构 - 依赖注入分层Controller / Service / Repository - MySQL Redis - 迁移 - 单元测试 - 静态检查 - GitHub Actions CI - Docker 化开发 ---2)从0初始化项目composercreate-project hyperf/hyperf-skeleton hyperf-starter-kitcdhyperf-starter-kit# 常用组件composerrequire hyperf/db-connection hyperf/database hyperf/rediscomposerrequire hyperf/validation hyperf/swaggercomposerrequire--devphpunit/phpunit friendsofphp/php-cs-fixer phpstan/phpstan ---3)推荐目录结构 hyperf-starter-kit/ ├─ app/ │ ├─ Controller/V1/ │ ├─ Service/ │ ├─ Repository/ │ │ └─ Contract/ │ ├─ Model/ │ └─ Exception/Handler/ ├─ config/autoload/ ├─ migrations/ ├─ tests/ ├─ .github/workflows/ ├─ Dockerfile ├─ docker-compose.yml ├─ Makefile ├─ README.md ├─ CONTRIBUTING.md ├─ CODE_OF_CONDUCT.md ├─ SECURITY.md └─ CHANGELOG.md ---4)核心代码可直接用4.1统一 API 响应助手 app/Support/ApiResponse.php?php declare(strict_types1);namespace App\Support;class ApiResponse{public staticfunctionsuccess(mixed$datanull, string$messageok): array{return[code0,message$message,data$data,tstime(),];}public staticfunctionerror(int$code, string$message, mixed$datanull): array{return[code$code,message$message,data$data,tstime(),];}}4.2健康检查接口 app/Controller/V1/HealthController.php?php declare(strict_types1);namespace App\Controller\V1;use App\Support\ApiResponse;use Hyperf\HttpServer\Annotation\Controller;use Hyperf\HttpServer\Annotation\GetMapping;#[Controller(prefix: /api/v1/health)]class HealthController{#[GetMapping(path: )]publicfunctionindex(): array{returnApiResponse::success([servicehyperf-starter-kit,statusup,]);}}4.3User 示例Controller / Service / Repository app/Repository/Contract/UserRepositoryInterface.php?php declare(strict_types1);namespace App\Repository\Contract;interface UserRepositoryInterface{publicfunctionfindById(int$id): ?array;}app/Repository/UserRepository.php?php declare(strict_types1);namespace App\Repository;use App\Model\User;use App\Repository\Contract\UserRepositoryInterface;class UserRepository implements UserRepositoryInterface{publicfunctionfindById(int$id): ?array{$userUser::query()-find($id);return$user?-toArray();}}app/Service/UserService.php?php declare(strict_types1);namespace App\Service;use App\Repository\Contract\UserRepositoryInterface;class UserService{publicfunction__construct(privatereadonlyUserRepositoryInterface$userRepository){}publicfunctiongetUserProfile(int$id): ?array{return$this-userRepository-findById($id);}}app/Controller/V1/UserController.php?php declare(strict_types1);namespace App\Controller\V1;use App\Service\UserService;use App\Support\ApiResponse;use Hyperf\Di\Annotation\Inject;use Hyperf\HttpServer\Annotation\Controller;use Hyperf\HttpServer\Annotation\GetMapping;#[Controller(prefix: /api/v1/users)]class UserController{#[Inject]protected UserService$userService;#[GetMapping(path: {id:\d})]publicfunctionshow(int$id): array{$user$this-userService-getUserProfile($id);if(!$user){returnApiResponse::error(40401,user not found);}returnApiResponse::success($user);}}4.4依赖绑定 config/autoload/dependencies.php?php declare(strict_types1);use App\Repository\Contract\UserRepositoryInterface;use App\Repository\UserRepository;return[UserRepositoryInterface::classUserRepository::class,];4.5Model Migration app/Model/User.php?php declare(strict_types1);namespace App\Model;use Hyperf\DbConnection\Model\Model;class User extends Model{protected ?string$tableusers;protected array$fillable[name,email,];}migrations/2026_04_25_000001_create_users_table.php?php declare(strict_types1);use Hyperf\Database\Migrations\Migration;use Hyperf\Database\Schema\Blueprint;use Hyperf\Database\Schema\Schema;returnnew class extends Migration{publicfunctionup(): void{Schema::create(users,function(Blueprint$table){$table-bigIncrements(id);$table-string(name,64);$table-string(email,128)-unique();$table-timestamps();});}publicfunctiondown(): void{Schema::dropIfExists(users);}};---5)开发环境Docker docker-compose.yml version:3.9services: app: image: php:8.2-cli working_dir: /app volumes: - ./:/app command:bash-lcphp -v php bin/hyperf.php startports: -9501:9501depends_on: - mysql - redis mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: hyperf_starter MYSQL_USER: hyperf MYSQL_PASSWORD: hyperf ports: -3306:3306redis: image: redis:7-alpine ports: -6379:6379---6)质量门禁本地命令 Makefile .PHONY: cs-fix cs-checkteststatic qa cs-fix: vendor/bin/php-cs-fixer fix cs-check: vendor/bin/php-cs-fixer fix --dry-run--difftest: vendor/bin/phpunit static: vendor/bin/phpstan analyse app tests--levelmax qa: cs-check statictest---7)CIGitHub Actions .github/workflows/ci.yml name: CI on: pull_request: push: branches:[main]jobs: qa: runs-on: ubuntu-latest steps: - uses: actions/checkoutv4 - name: Setup PHP - uses: shivammathur/setup-phpv2 with: php-version:8.2extensions: mbstring, pdo_mysql, redis coverage: none - name: Install deps run:composerinstall--no-interaction --prefer-dist - name: CS check run:makecs-check - name: Static analysis run:makestatic - name: Tests run:maketest▎ 注意上面 Setup PHP 那段要修正缩进- uses 与 name 对齐我这里给你的是内容模板复制时按 YAML 标准缩进即可。 ---8)开源仓库必备文档 至少补齐这些文件 - README.md安装、运行、接口示例、架构图 - CONTRIBUTING.md分支规范、提交规范、PR 流程 - SECURITY.md漏洞提交流程邮箱 / 私密渠道 - CODE_OF_CONDUCT.md社区行为准则 - CHANGELOG.md版本变更记录Keep a Changelog ---9)发布策略建议 - 分支main稳定feat/*功能fix/*修复 - 版本SemVerv1.2.3 - 提交规范Conventional Commitsfeat:, fix:, chore: - 发布节奏双周小版本季度大版本 - 每次发布包含 a. CHANGELOG 更新 b. Git tag c. GitHub Release 说明 d. 升级指南破坏性变更必须写 ---10)持续维护 SOP操作日志 你说要“完整操作日志”这里给你可直接用的模板 OPEN_SOURCE_OPS_LOG.md# Open Source Ops Log## 2026-04-25- Action: 初始化仓库与基础目录 - Detail: 完成 Hyperf skeleton、README、License、CI 初版 - Result: v0.1.0-dev 可运行 - Risk: 无迁移回滚方案 - Next: 增加 migration rollback 文档## 2026-04-26- Action: 增加 User 示例模块 - Detail: Controller/Service/Repository 分层 usersmigration - Result: /api/v1/users/{id}可用 - Risk: 缺少鉴权 - Next: 接入 JWT 中间件并补测试## 2026-04-27- Action: 建立 QA 门禁 - Detail: php-cs-fixer phpstan phpunit GitHub Actions - Result: PR 自动阻断不合规提交 - Risk: 覆盖率不足 - Next: 核心service覆盖率提升到80% ---11)最小上线命令清单团队交接最有用# 本地开发composerinstallphp bin/hyperf.php migrate php bin/hyperf.php start# 质量检查makeqa# 打标签发布gittag v0.1.0gitpush origin v0.1.0 ---12)一句话落地建议 先按上面代码做出 v0.1.0保证“能跑 有测试 有 CI 有文档”再迭代鉴权、日志、追踪、限流。开源项目早期最关键的是稳定维护节奏不是一次堆满功能。

相关文章:

做一个开源完整流程=hyperf 服务脚手架 Starter Kit

--- 1) 目标定义(开源仓库定位)仓库名建议:hyperf-starter-kit定位:开箱即用的 Hyperf API 服务脚手架&…...

hyperf 多租户 SaaS 基础框架 开源完整流程(从 0 到持续维护)==写开源项目全流程

一套 Hyperf 多租户 SaaS 基础框架的开源落地方案,覆盖 从 0 搭建到持续维护,并给出可直接改造的核心代码骨架。---1) 先定多租户策略(强烈建议这样起步) …...

清音刻墨Qwen3智能字幕对齐:小白也能懂的快速入门指南

清音刻墨Qwen3智能字幕对齐:小白也能懂的快速入门指南 1. 引言:字幕对齐的痛点与解决方案 视频制作中最让人头疼的问题之一就是字幕不同步。传统字幕制作需要手动调整时间轴,不仅耗时耗力,还很难做到精准对齐。想象一下&#xf…...

9天掌握PyTorch深度学习:高效实战指南

1. 课程概览与学习价值这个9天PyTorch深度学习迷你课程是我在指导数百名学员后提炼出的高效学习路径。不同于传统教材按部就班的讲解方式,我们采用"问题驱动即时实践"的教学方法,每天聚焦一个核心主题,通过3-4个典型代码案例贯穿知…...

egergergeeert惊艳效果:银发少女插画中发丝细节、布料褶皱、光影过渡展示

egergergeeert惊艳效果:银发少女插画中发丝细节、布料褶皱、光影过渡展示 1. 效果亮点概览 egergergeeert文生图镜像在角色插画创作中展现出惊人的细节表现力,特别是在以下三个方面尤为突出: 发丝细节:能够生成单根分明的发丝效…...

k-Means聚类算法优化实战:从初始化到核技巧

1. k-Means算法回顾与常见痛点分析k-Means作为无监督学习中最经典的聚类算法之一,其简洁性和高效性使其成为数据分析的入门必修课。算法通过迭代计算样本点到聚类中心的距离,不断调整中心点位置,最终实现数据的分组。但正是这种简洁性&#x…...

云原生智能代理架构实战:基于事件驱动与基础设施即代码的快速构建

1. 项目概述:一个面向云原生应用的智能代理启动包最近在整理云原生项目的开发工具链时,我又一次翻出了GoogleCloudPlatform下的agent-starter-pack。这可不是一个简单的代码仓库,而是一个被很多团队低估了的“瑞士军刀”。简单来说&#xff0…...

AWPortrait-Z完整攻略:科哥WebUI从安装到精通全流程解析

AWPortrait-Z完整攻略:科哥WebUI从安装到精通全流程解析 1. 快速启动与界面初探 如果你对AI生成人像充满好奇,但又被复杂的命令行和参数吓退,那么AWPortrait-Z的WebUI界面就是为你准备的。这个由科哥基于Z-Image精心构建并二次开发的人像美…...

构建垂直领域智能助手:混合智能体与RAG架构实战解析

1. 项目概述:一个专为宝可梦世界打造的智能对话系统如果你是一个宝可梦的资深爱好者,或者对构建垂直领域的智能助手感兴趣,那么“可萌”这个项目绝对值得你花时间研究。它不是一个简单的聊天机器人,而是一个融合了知识图谱、大语言…...

Banana Pi BPI-W3开发板:RK3588 SoC与模块化设计解析

1. Banana Pi BPI-W3开发板深度解析作为一款基于Rockchip RK3588 SoC的高性能单板计算机,Banana Pi BPI-W3在硬件配置和接口丰富度上都达到了业界领先水平。这款开发板最引人注目的特点是采用了模块化设计——核心处理器部分采用独立的BPI-RK3588核心板,…...

量子纠错与实时解码:CUDA-Q QEC技术解析

1. 量子纠错与实时解码的核心价值在量子计算领域,量子比特的脆弱性一直是实现实用化量子计算机的主要障碍。量子态极易受到环境噪声干扰,导致量子相干性在极短时间内衰减——这种现象被称为退相干(Decoherence)。以超导量子比特为…...

Tailwind CSS 指令与函数

Tailwind CSS 指令与函数学习笔记 一、总览 Tailwind CSS 的指令与函数分为两大类:类别作用域用途指令(Directives)CSS 文件中控制 Tailwind 的编译行为函数(Functions)CSS 文件 / 配置文件中动态引用主题值 二、指令&…...

Tailwind CSS 自定义样式

Tailwind CSS 自定义样式学习笔记 一、自定义样式的层次结构 ┌──────────────────────────────────────────────────────┐ │ tailwind.config.js → 设计系统 Token(颜色/间距/字号) │ │…...

基于Mastra框架构建生产级AI应用:从Agent与Workflow设计到实战部署

1. 从零到一:为什么选择 Mastra 来构建你的 AI 应用?如果你正在用 TypeScript 栈开发 AI 应用,并且已经尝试过直接调用 OpenAI 的 API 或者用 LangChain 搭过一些原型,那你大概率会遇到几个绕不开的痛点:模型切换成本高…...

M2FP人体解析零基础教程:5分钟搭建WebUI服务,一键识别身体部位

M2FP人体解析零基础教程:5分钟搭建WebUI服务,一键识别身体部位 1. 什么是M2FP人体解析? M2FP(Mask2Former-Parsing)是一种先进的计算机视觉模型,专门用于识别图片中人物的各个身体部位。想象一下&#xf…...

Phi-3.5-mini-instruct部署避坑指南:vLLM加载失败排查、Chainlit连接超时解决方案

Phi-3.5-mini-instruct部署避坑指南:vLLM加载失败排查、Chainlit连接超时解决方案 1. 模型简介 Phi-3.5-mini-instruct是Phi-3模型家族中的轻量级成员,作为一款先进的开放模型,它具备以下核心特点: 128K超长上下文:…...

开源无代码数据库Baserow:自托管部署与CRM应用实战

1. 项目概述:为什么我们需要一个开源的“Airtable”? 如果你曾经为团队寻找过一款既能像电子表格一样直观操作,又能像数据库一样结构化存储数据的工具,那么Airtable这个名字大概率会出现在你的搜索结果里。它确实很棒,…...

Weka机器学习工具入门与实战指南

1. Weka机器学习工具入门指南Weka作为一款开源的机器学习工具集,自1997年由怀卡托大学开发以来,已成为学术界和工业界广泛使用的数据挖掘平台。它集成了数据预处理、分类、回归、聚类、关联规则挖掘和可视化等完整功能链,特别适合没有编程基础…...

Vivado仿真器底层工具链揭秘:xvlog、xelab、xsim到底在干什么?

Vivado仿真器底层工具链揭秘:xvlog、xelab、xsim到底在干什么? 当你在Vivado中点击"Run Simulation"按钮时,背后实际上启动了一个精密的工具链流水线。这个看似简单的操作背后,隐藏着三个关键角色:xvlog、xe…...

【深入解析LoRA】从低秩自适应到高效微调:原理、实践与调优指南

1. 为什么LoRA能成为大模型微调的首选方案 第一次接触LoRA是在去年部署一个客服对话系统时遇到的。当时客户扔过来一个175B参数的GPT-3模型,要求我们在两周内完成业务场景适配。看着服务器上那几块可怜的A100显卡,团队里所有人都觉得这是个不可能完成的任…...

从零开始打造AI画图大师:条件扩散模型完整实现与无分类器指引详解

你有没有想过,AI是如何听懂你的指令,画出你想要的东西的?当你对Midjourney输入“一只穿着宇航服的柴犬”,它真的能生成那张图——这背后究竟发生了什么?今天,我将带你亲手实现一个基础的文本控制AI绘图系统…...

机器学习数据预处理:数据标准化(Z-Score)

机器学习数据预处理:数据标准化(Z-Score)超通俗全解 数据标准化是**把所有特征统一变成“均值为0,标准差为1”**的最经典预处理方法,彻底解决量纲不一致、数值差距大的问题,所有对尺度敏感的模型都必须做。…...

【限时技术解禁】:VSCode 2026 Dev Tunnels直连容器的私有化部署方案(绕过GitHub Auth,企业级离线可用)

更多请点击: https://intelliparadigm.com 第一章:VSCode 2026 Dev Tunnels直连容器的技术演进与企业适配价值 VSCode 2026 引入的 Dev Tunnels 原生直连容器能力,标志着远程开发范式从 SSH 代理与端口转发迈向零配置、身份感知、双向加密隧…...

本地GPU预训练Llama模型全流程与优化策略

1. 本地GPU预训练Llama模型全流程解析在自然语言处理领域,Transformer架构已成为大语言模型的事实标准。作为其中的佼佼者,Llama系列模型因其出色的性能和开源特性备受关注。本文将手把手教你如何在本地GPU上完成Llama模型的预训练全流程。1.1 为什么选择…...

深度学习模型集成方法:Bagging实战与优化

1. 深度学习模型集成方法概述在机器学习领域,集成学习(Ensemble Learning)是一种通过组合多个模型的预测结果来提升整体性能的技术。这种方法的核心思想是"三个臭皮匠顶个诸葛亮"——多个模型的集体智慧往往比单个模型表现更好。特别是在深度学习领域&…...

GeniA:大语言模型驱动的生物信息学智能体框架实战指南

1. 项目概述:当AI遇上基因,GeniA如何重塑生物信息学工作流如果你是一名生物信息学研究员、计算生物学家,或者任何需要与高通量测序数据打交道的从业者,那么你一定对“数据洪流”这个词深有体会。从二代测序到三代测序,…...

Transformer位置编码原理与实战技巧详解

1. 位置编码的本质与必要性在传统RNN结构中,序列数据是逐个元素处理的,这种顺序处理方式天然包含了位置信息。但Transformer模型采用并行处理的注意力机制,需要显式地注入位置信息才能理解序列中元素的相对或绝对位置。这就是位置编码&#x…...

神经网络反向传播算法实现与优化指南

1. 神经网络与反向传播算法基础神经网络是机器学习中最强大的工具之一,而反向传播算法则是训练神经网络的核心技术。让我们从一个开发者的角度来理解这个看似复杂的概念。想象你正在教一个孩子识别动物。最初孩子会犯很多错误,但每次错误后你会指出哪里错…...

流体天线阵列与空中计算技术的联合优化实践

1. 流体天线阵列与空中计算技术解析在物联网设备数量爆炸式增长的今天,传统"先通信后计算"的模式正面临严峻挑战。想象一下,当数千个传感器同时向云端发送数据时,不仅会挤占宝贵的无线频谱资源,还会产生难以忍受的通信延…...

3步解密网页视频下载:VideoDownloadHelper智能解析实战指南

3步解密网页视频下载:VideoDownloadHelper智能解析实战指南 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 你是否曾遇到过这样的…...