定制 topextend/think-library 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

topextend/think-library

Composer 安装命令:

composer require topextend/think-library

包简介

ThinkPHP layered admin framework — Controller / Application / Repository scaffolding

README 文档

README

ThinkPHP 8 通用后台开发类库:分层脚手架 + 基础设施

本库只提供可复用的开发约定与工具(控制器基类、Application/Repository 抽象、JWT、中间件、存储、操作日志等),不包含具体业务表、租户、插件、菜单种子等平台/SaaS 逻辑。业务实现请参考上层应用 cloud/apps/admin-apiapp/platform 通用后台 + app/cloud SaaS 扩展)。

要求

  • PHP >= 8.1
  • ThinkPHP ^8.0
  • think-orm ^3.0|^4.0

安装

composer require topextend/think-library

ThinkPHP 项目需在 composer.json 中启用服务发现(默认已开启),库会自动注册 think\library\bootstrap\Library 服务。

本地 monorepo 开发可在应用 composer.json 中配置 path 仓库指向 packages/think-library

目录结构

src/
├── bootstrap/              # Library 服务注册、Runtime
├── common.php              # syspath()、sysvar() 全局助手
├── foundation/
│   ├── ApiController.php   # JSON API 控制器基类
│   ├── BaseService.php     # 单例服务基类
│   └── BaseApplication.php # 用例层基类
├── domain/
│   ├── contract/           # RepositoryInterface、OplogWriterInterface
│   ├── oplog/              # OplogEntry
│   ├── result/             # PageResult
│   ├── storage/            # Storage 文件引擎
│   ├── PluginRegistry.php  # 多应用/插件注册表
│   └── AppNamespace.php
├── application/
│   ├── RbacMatcher.php     # RBAC 路径/菜单匹配(纯逻辑)
│   └── CronMatcher.php     # Cron 表达式匹配
└── infrastructure/
    ├── persistence/        # AbstractRepository
    ├── storage/            # LocalPublicStorage 等驱动
    ├── middleware/         # 见下文「中间件」
    ├── oplog/              # OplogWriter、ApiOplogRecorder
    ├── Jwt.php
    ├── Validate.php
    ├── Tools.php
    └── DatabaseSupport.php

分层约定

推荐调用链:

Controller → Application (*Manage) → Repository → Db
层级库内基类职责
ControllerApiControllerHTTP 入参/出参、success/error、参数校验
ApplicationBaseApplication编排用例,调用 Repository,不写 SQL
RepositoryAbstractRepository表访问、分页、CRUD 封装

控制器示例

namespace app\demo\controller;

use think\library\foundation\ApiController;
use app\demo\application\ArticleManage;

class Article extends ApiController
{
    public function list()
    {
        $page = max(1, (int) $this->request->get('page', 1));
        $pageSize = max(1, min(100, (int) $this->request->get('pageSize', 20)));
        $this->success('ok', ArticleManage::instance()->list($page, $pageSize));
    }

    public function save()
    {
        $data = $this->_vali(['title.require' => '标题不能为空']);
        ArticleManage::instance()->save($data);
        $this->writeOplog('文章管理', '保存', $data['title'] ?? '');
        $this->success('保存成功');
    }
}

Application 示例

namespace app\demo\application;

use think\library\foundation\BaseApplication;
use app\demo\persistence\ArticleRepository;

class ArticleManage extends BaseApplication
{
    public function list(int $page, int $limit): array
    {
        $result = ArticleRepository::instance()->paginate($page, $limit);
        return $result->toArray();
    }
}

Repository 示例

namespace app\demo\persistence;

use think\library\infrastructure\persistence\AbstractRepository;

class ArticleRepository extends AbstractRepository
{
    protected function table(): string
    {
        return 'article';
    }

    protected function query()
    {
        return \think\facade\Db::name($this->table())->where('is_deleted', 0);
    }
}

AbstractRepository 已内置 instance() 单例,子类可直接 ArticleRepository::instance()

自动注册的服务

Library 服务在 register() 阶段会:

  1. 加载应用目录下的 sys.phpcommon.phpprovider.phpevent.phpmiddleware.php(可选)
  2. 注册全局 CORS 中间件
  3. 注册 LoadLangPackJwtAccessRbacAccessLangPackAccessApiOplogAccess

JWT / RBAC / Oplog 中间件会按 config/library.php 中各节的 scopes.{name}.scope_matcher 自动匹配命名 scope,无需在应用里写包装类或 app/{app}/middleware.php

boot() 阶段的 HttpRun 事件中注册 MultAccess(多应用调度)。

中间件

中间件说明
MultAccess多应用 URL 解析与 app/{name}/ 加载
JwtAccessJWT 鉴权(按 jwt.scopes 自动匹配)
RbacAccessRBAC 权限校验(需在 Jwt 之后)
LangPackAccess语言包加载(通过配置注入)
ApiOplogAccessAPI 访问自动记操作日志(支持命名 scope)
AppRequestUtil多应用 path 识别与归一化工具类

库内中间件不包含租户解析等业务逻辑;业务侧在应用 config/library.php 中通过回调注入规则。

config/library.php 示例

在业务项目(如 admin-api)创建 config/library.php

<?php

use think\Request;

return [
    // JWT(租户 API 默认 scope)
    'jwt' => [
        'ignore' => ['auth/login', 'login/index'],
        'scope_matcher' => fn (Request $r) => str_starts_with($r->pathinfo(), 'api'),
        'secret' => fn () => (string) config('jwt.secret'),
        'user_resolver' => function (array $payload, Request $r) {
            // 返回用户数组或 null
        },
        // 命名 scope:平台后台
        'scopes' => [
            'admin' => [
                'scope_matcher' => fn (Request $r) => app()->http->getName() === 'platform',
                'path_normalizer' => fn (Request $r) => trim($r->pathinfo(), '/'),
                'secret' => fn () => 'your-platform-secret',
                'user_resolver' => fn (array $payload) => /* ... */,
                'user_alias' => 'adminUser',
            ],
        ],
    ],

    // RBAC
    'rbac' => [
        'guard' => \app\cloud\application\RbacGuard::class,
        'scope_id' => fn () => tenant()->id(),
        'scopes' => [
            'admin' => [
                'checker' => fn (int $uid, string $method, string $path) => true,
            ],
        ],
    ],

    // 语言包
    'lang_pack' => [
        'register' => fn (Request $r) => /* 加载语言包 */,
    ],

    // 操作日志
    'oplog' => [
        'default_scope' => 'tenant',
        'writers' => [
            'platform' => \app\\admin\infrastructure\AdminOplogWriter::class,
            'tenant' => \app\cloud\infrastructure\TenantOplogWriter::class,
        ],
        'scopes' => [
            'admin' => [
                'writer_scope' => 'admin',
                'node_map' => ['admin/' => '用户管理'],
            ],
        ],
    ],
];

操作日志 OplogWriter

use think\library\infrastructure\oplog\OplogWriter;

// 直接写入
OplogWriter::write('用户管理', '保存', '新增 admin', 'admin', 'platform');

// 控制器内(ApiController 已提供)
$this->writeOplog('用户管理', '保存', '新增 admin', null, 'platform');

实现 OplogWriterInterface 并在 config/library.phpoplog.writers 中注册即可接入自定义存储。

多应用与插件

继承 think\library\domain\PluginRegistry 注册子应用:

namespace app\mall;

class Service extends \think\library\domain\PluginRegistry
{
    protected string $appName = '商城';
    protected string $package = 'topextend/plugin-mall';
}

在应用 app/service.php 中注册该 Service,MultAccess 即可按 URL 前缀调度到 app/mall/

可选配置覆盖:

'addon_registry' => \think\library\domain\PluginRegistry::class,

其他工具

组件用途
JwtJWT 签发与校验,支持传入 secret
Validate链式参数校验,供 _vali() 使用
Storage文件存储门面(local/public,可扩展 OSS 等)
PageResult分页结果 DTO
RbacMatcher路径/菜单节点匹配,供业务 Guard 复用
CronMatcher判断 cron 表达式是否到期
DatabaseSupport建库/迁移脚本辅助
syspath() / sysvar()项目路径与请求级变量

与 admin-api 的关系

职责
think-library分层脚手架、JWT/中间件、存储、操作日志、多应用调度
admin-api基于本库实现的通用后台与 Cloud SaaS(用户/角色/菜单/租户/插件等)

数据库脚本位于 monorepo 的 cloud/database/(全量)与 cloud/database/admin/(仅 platform 表)。

许可证

MIT

统计信息

  • 总下载量: 3
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-07-08

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固