承接 weijukeji/laravel-dictionary 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

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

weijukeji/laravel-dictionary

Composer 安装命令:

composer require weijukeji/laravel-dictionary

包简介

Laravel Dictionary package for managing dictionary categories and items with caching support

README 文档

README

Latest Version on Packagist Total Downloads License

一个功能完整、易于使用的 Laravel 字典管理包,支持分类和字典项的统一管理,内置缓存优化,提供 RESTful API 接口。

English | 简体中文

特性

  • 分类管理 - 支持字典分类的树形结构管理
  • 📝 字典项管理 - 灵活的字典项增删改查
  • 🔢 自动生成值 - 支持自动生成字典项数值
  • 高性能 - 内置缓存支持,优化查询性能
  • 🔌 即插即用 - 开箱即用的 API 接口
  • 🎯 RESTful 风格 - 标准的 RESTful API 设计
  • 📦 易于扩展 - 清晰的代码结构,方便二次开发
  • 🔒 数据过滤 - 集成 EloquentFilter 支持复杂查询
  • 🌱 数据导入导出 - 支持导出和导入种子数据
  • 🗄️ 多数据库支持 - 支持 MySQL、PostgreSQL、SQLite 等

环境要求

  • PHP >= 8.2
  • Laravel 11.x, 12.x, 13.x

安装

通过 Composer 安装包:

composer require weijukeji/laravel-dictionary

发布配置文件和迁移文件:

# 发布配置文件
php artisan vendor:publish --tag=dictionary-config

# 发布迁移文件
php artisan vendor:publish --tag=dictionary-migrations

运行数据库迁移:

php artisan migrate

配置

配置文件位于 config/dictionary.php

return [
    // 数据库表名
    'table_categories' => 'dictionary_categories',
    'table_items' => 'dictionary_items',

    // API 路由配置
    'route_prefix' => 'api/dictionaries',
    'route_middleware' => ['api'],

    // 缓存配置
    'cache_enabled' => true,
    'cache_ttl' => 3600,
    'cache_prefix' => 'dict:',
    'cache_driver' => null,

    // 分页配置
    'per_page' => 15,
    'max_per_page' => 100,
];

使用指南

API 端点

包提供了完整的 RESTful API 接口:

字典分类

# 获取分类列表(分页)
GET /api/dictionaries/categories

# 获取分类树
GET /api/dictionaries/tree

# 创建分类
POST /api/dictionaries/categories

# 更新分类
PUT /api/dictionaries/categories/{id}

# 删除分类
DELETE /api/dictionaries/categories/{id}

字典项

# 获取字典项列表(分页)
GET /api/dictionaries/items

# 根据分类键获取字典项
GET /api/dictionaries/items/by-key/{categoryKey}

# 创建字典项
POST /api/dictionaries/items

# 更新字典项
PUT /api/dictionaries/items/{id}

# 删除字典项
DELETE /api/dictionaries/items/{id}

请求示例

创建字典分类

curl -X POST http://your-app.test/api/dictionaries/categories \
  -H "Content-Type: application/json" \
  -d '{
    "parent_id": null,
    "category_key": "status",
    "category_name": "状态分类",
    "sort_order": 1
  }'

创建字典项(手动输入键)

curl -X POST http://your-app.test/api/dictionaries/items \
  -H "Content-Type: application/json" \
  -d '{
    "parent_key": "status",
    "item_key": "1",
    "item_value": "启用",
    "sort_order": 1,
    "is_enabled": true,
    "auto_generate_key": false
  }'

创建字典项(自动生成键)

curl -X POST http://your-app.test/api/dictionaries/items \
  -H "Content-Type: application/json" \
  -d '{
    "parent_key": "status",
    "item_value": "停用",
    "sort_order": 2,
    "is_enabled": true,
    "auto_generate_key": true
  }'

获取字典项

curl http://your-app.test/api/dictionaries/items/by-key/status

自动生成字典键

创建字典项时,可以选择自动生成数字键:

// 前端传参
{
    "parent_key": "status",
    "item_value": "待处理",
    "auto_generate_key": true  // 自动生成键
}

// 后端自动生成规则:
// 1. 查找该分类下最大的纯数字键
// 2. 在最大值基础上 +1
// 3. 如果没有数字键,从 "1" 开始

生成示例:

  • 首次创建:生成 "1"
  • 已有 "1", "2", "3":生成 "4"
  • 已有 "1", "active", "99":生成 "100"(忽略非数字键)

在代码中使用

使用 Facade

use WeiJuKeJi\LaravelDictionary\Facades\Dict;

// 获取字典项
$items = Dict::getItemsByKey('status');

// 获取分类树
$tree = Dict::getTree();

使用模型

use WeiJuKeJi\LaravelDictionary\Models\DictionaryCategory;
use WeiJuKeJi\LaravelDictionary\Models\DictionaryItem;

// 查询分类
$category = DictionaryCategory::where('category_key', 'status')->first();

// 查询字典项
$items = DictionaryItem::where('parent_key', 'status')
    ->enabled()
    ->orderBy('sort_order')
    ->get();

使用服务类

use WeiJuKeJi\LaravelDictionary\Services\DictionaryService;

$service = app(DictionaryService::class);

// 获取树形结构
$tree = $service->getTree();

// 保存分类
$category = $service->saveCategory([
    'category_key' => 'status',
    'category_name' => '状态分类',
    'sort_order' => 1
]);

// 保存字典项
$item = $service->saveItem([
    'parent_key' => 'status',
    'item_key' => '1',
    'item_value' => '启用',
    'sort_order' => 1,
    'is_enabled' => true
]);

数据导入导出

导出字典数据

将当前数据库中的字典数据导出为 JSON 文件:

# 导出到默认路径 database/seeders/dictionaries.json
php artisan dictionary:export

# 导出到指定路径
php artisan dictionary:export storage/app/dictionaries.json

导入字典数据

从 JSON 文件导入字典数据:

# 使用 Seeder 导入
php artisan db:seed --class=WeiJuKeJi\\LaravelDictionary\\Database\\Seeders\\DictionarySeeder

# 清空并重新导入(交互式确认)
php artisan dictionary:reseed

# 强制重新导入(不询问)
php artisan dictionary:reseed --force

在 DatabaseSeeder 中使用

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use WeiJuKeJi\LaravelDictionary\Database\Seeders\DictionarySeeder;

class DatabaseSeeder extends Seeder
{
    public function run(): void
    {
        $this->call([
            DictionarySeeder::class,
            // 其他 Seeders...
        ]);
    }
}

JSON 文件格式

{
  "categories": [
    {
      "parent_id": null,
      "category_key": "status",
      "category_name": "状态分类",
      "sort_order": 1
    }
  ],
  "items": [
    {
      "parent_key": "status",
      "item_key": "1",
      "item_value": "启用",
      "sort_order": 1,
      "is_enabled": true
    }
  ]
}

数据结构

字典分类表 (dictionary_categories)

字段 类型 说明
id bigint 主键
parent_id bigint 父分类ID
category_key string 分类键(唯一)
category_name string 分类名称
sort_order integer 排序
created_at timestamp 创建时间
updated_at timestamp 更新时间

字典项表 (dictionary_items)

字段 类型 说明
id bigint 主键
parent_key string 所属分类键
item_key string 字典项键
item_value string 字典项值
sort_order integer 排序
is_enabled boolean 是否启用
created_at timestamp 创建时间
updated_at timestamp 更新时间

响应格式

所有 API 接口返回统一的 JSON 格式:

成功响应

{
  "code": 200,
  "msg": "success",
  "data": {
    "list": [...],
    "total": 100
  }
}

错误响应

{
  "code": 400,
  "msg": "错误信息",
  "data": {
    "errors": []
  }
}

数据保护

删除保护

  • ❌ 不能删除有子分类的分类
  • ❌ 不能删除有字典项的分类
  • ✅ 必须先清空数据才能删除

唯一性约束

  • 分类键(category_key)全局唯一
  • 字典项键(item_key)在同一分类下唯一

命令行工具

命令 说明
dictionary:export [path] 导出字典数据到 JSON 文件
dictionary:reseed [--force] 清空并重新导入字典数据

测试

composer test

更新日志

请查看 CHANGELOG 了解更多信息。

贡献

欢迎贡献代码!请查看 CONTRIBUTING 了解详情。

安全

如果发现任何安全相关问题,请发送邮件至 dev@weijukeji.com 而不是使用 issue 跟踪器。

许可证

MIT 许可证。详情请查看 LICENSE 文件。

致谢

weijukeji/laravel-dictionary 适用场景与选型建议

weijukeji/laravel-dictionary 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 23 次下载、GitHub Stars 达 0, 最近一次更新时间为 2025 年 12 月 17 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「api」 「cache」 「dictionary」 「laravel」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 weijukeji/laravel-dictionary 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 weijukeji/laravel-dictionary 我们能提供哪些服务?
定制开发 / 二次开发

基于 weijukeji/laravel-dictionary 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

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

GitHub 信息

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

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-12-17