poing / earmark
Laravel 包,用于生成唯一且可定制的值序列。
Requires
- php: >=8.1
- illuminate/console: >=11.0
- illuminate/database: >=11.0
- illuminate/events: >=11.0
- illuminate/filesystem: >=11.0
- illuminate/support: >=11.0
Requires (Dev)
- orchestra/testbench: ^9.0
- php-coveralls/php-coveralls: ^2.2
- phpunit/phpunit: ^11.0
This package is auto-updated.
Last update: 2024-09-02 23:32:10 UTC
README
Earmark
一个 Laravel 包,用于在序列中标记连续值并消除序列中值被 unset
时产生的任何空缺。 允许值被重复使用。
它可以用来获取应用程序中将要使用的下一个值(或值数组)。使用数据库锁定来 防止 返回重复的值。
一个例子...
为用户预留下一个可用的电话分机。电话分机可以通过活动会话进行预留,防止其他会话获取相同的值。
当用户离开时,电话分机可以被 回收,值可以被 unset()
。使该值对未来的请求再次可用。
入门
1. 安装 EarMark
在命令行运行以下命令
composer require poing/earmark
这将更新 composer.json 并将包安装到 vendor/ 目录中。
2. 发布 EarMark 配置文件
要覆盖默认设置,通过运行以下命令初始化配置文件
php artisan earmark:config
然后打开 config/earmark.php 并编辑设置以满足应用程序的要求。
3. 运行迁移
在命令行运行包迁移文件
php artisan migrate
4. 推荐
此包设计用于使用 Laravel 队列,以延迟填充可用值池的耗时任务。
您可能需要更改默认的 QUEUE_CONNECTION
以使用其他策略。但是,该包 也 与默认的 sync
一起工作,但 可能 会导致应用程序的延迟。
设置
保持大小
这是在可用池中保留的序列值的数量。一旦池降至一定水平以下,更多值将被添加到池中。 这是未使用值被回收的地方。
重要
- 补充保持大小 将 是耗时的,并且 可能 需要几分钟才能完成。
- 根据您如何使用 Earmark,保持大小应该是预期的
get()
请求 最大值 的倍数。 - 保持大小 应该 配置为允许在低于三分之一的数量后进行足够数量的
get()
请求。
数字范围
此包 目前 支持最小值。 range.min
将定义序列的起始值。 默认值:2000
2000
2001
2002
2003
range.max
可能会在将来使用。
零填充
允许输出值根据应用程序的需求进行零填充。
2004
002005
00000000002006
前缀 & 后缀
将一个 前缀 添加到输出值。
ALPHA2007
ALPHA002008
ALPHA00000000002009
suffix
可能会在将来使用。
如何使用
有两种方法可以使用此包
Earmarked
使用池中的 默认 值。 默认值已经“标记”。Earmark
创建一个 新 的值池来使用。 使用新的“Earmark”自定义设置。
可用函数
get()
- 返回一个 单个 格式化的值。
- 将接受 可选 整数以返回格式化值的数组。
unset($value)
- 接受 格式化 值作为字符串或数组。
简单用法
使用配置文件中的值,使用 Earmarked::get()
和 Earmarked::unset()
。
$serial = Earmarked::get(); // Returns: '2010' Earmarked::unset($serial);
您还可以 指定 数组中要返回的值的数量
$serial = Earmarked::get(3); // Returns: [ '2011', '2012', '2013', ] Earmarked::unset($serial);
高级用法
您可以使用 Earmark()
和以下变量 初始化 一个 新 的序列
- 前缀
- 后缀 (非功能占位符)
- 填充
- 最小值
- 最大值 (非功能占位符)
// Earmark(prefix, suffix, padding, min, max) $earmark = new Earmark('ZULU', null, 10, 5000, null); $earmark->get(); // Returns: 'ZULU0000005000' $earmark->get(3); // Returns: [ 'ZULU0000005001', 'ZULU0000005002', 'ZULU0000005003', ]
新系列不会影响默认系列,再次调用系列 (使用相同参数) 将继续数字序列。
// Default Series $serial = Earmarked::get(); // Returns: '2014' $serial = Earmarked::get(3); // Returns: [ '2015', '2016', '2017', ] // Using Same Parameters Again $earmark = new Earmark('ZULU', null, 10, 5000, null); $earmark->get(); // Returns: 'ZULU0000005004' $earmark->get(3); // Returns: [ 'ZULU0000005005', 'ZULU0000005006', 'ZULU0000005007', ]
工作原理
在一个数字序列的间隔中搜索可能非常耗费资源。取决于序列的大小。
此软件包使用两个(2
)表,一个用于已使用数字的序列,另一个用于保留
一组可供立即使用的数字。软件包将从保留
表中获取下一个连续的数字。
当保留
表中的可用数字低于三分之一时,此软件包将用更多数字重新填充保留
。 此软件包与 Laravel 队列配合使用效果最佳。
已通过unset()
删除的序列中的数字将被添加到保留
表中进行重用,以便在更新时使用。 保留
表中的数字没有排序,unset()
的数字将最终再次可用。
附加功能
自动递增
有时您只想在自动递增序列中获得下一个数字。本软件包中包含了一个。它不支持前缀
,不会支持后缀
,但您可以使用零填充。
不要使用unset()
与increment()
值!已提醒您!
Earmarked::increment(); // Returns: 1 Earmarked::increment(); // Returns: 2 $earmark = new Earmark('ZULU', null, 20, 5000, null); $earmark->increment(true); // Returns: '00000000000000000003'
贡献
考虑贡献吗?
- 分叉并克隆项目:
git clone git@github.com:your-username/earmark.git
。 - 运行测试并确保它们通过您的设置:
phpunit
。 - 创建您的错误修复/功能分支并编写您的更改。为您的更改添加测试。
- 确保所有测试仍然通过:
phpunit
。 - 推送到您的分叉并提交新的拉取请求。