cybercog / laravel-optimus
为Laravel提供的Optimus桥梁。基于Knuth乘法散列方法的ID混淆。
Requires
- php: ^7.4|^8.0
- graham-campbell/manager: ^5.0
- illuminate/contracts: ^8.0|^9.0|^10.0|^11.0
- illuminate/support: ^8.0|^9.0|^10.0|^11.0
- jenssegers/optimus: ^0.2.2
Requires (Dev)
- graham-campbell/testbench: ^6.0
- mockery/mockery: ^1.0
- phpunit/phpunit: ^9.6|^10.5
README
介绍
Laravel对Optimus库的包装,由Jens Segers开发,支持多个连接。Optimus是一个小巧的开源库,可以从数字生成短、唯一、非顺序的ID。使用这个库,你可以将内部ID转换成基于Knuth整数的混淆整数。它与Hashids类似,但会生成整数而不是随机字符串。它也非常快。
内容
特性
- 可配置的多个Optimus连接支持。
- 隐式路由模型绑定。
- 专为与Laravel Eloquent模型协同工作而设计。
- 准备好的依赖注入。
- 包含外观。
- 遵循PHP标准建议
- 覆盖单元测试。
安装
首先,通过Composer拉取包。
composer require cybercog/laravel-optimus
手动注册包(可选)
如果您禁用了包自动发现,则可以手动注册。
在app/config/app.php
中包含服务提供者。
'providers' => [ Cog\Laravel\Optimus\Providers\OptimusServiceProvider::class, ],
如果您想使用外观,请将引用添加到config/app.php
中的别名数组中。
'aliases' => [ 'Optimus' => Cog\Laravel\Optimus\Facades\Optimus::class, ],
配置
Laravel Optimus需要连接配置。要开始,您需要发布配置文件
php artisan vendor:publish --provider="Cog\Laravel\Optimus\Providers\OptimusServiceProvider" --tag="config"
这将创建一个config/optimus.php
文件,您可以在其中修改以设置配置。同时,请确保检查此包中原始配置文件在版本之间的更改。
默认连接名称
此选项default
是您可能指定要使用以下哪个连接作为所有工作的默认连接的地方。当然,您可以使用管理器类同时使用多个连接。此设置的默认值是main
。
Optimus连接
此选项connections
是设置应用程序中每个连接的地方。已包括示例配置,但您可以添加尽可能多的连接。
Optimus数字生成
要开始,您需要在主连接中获取3个密钥;
prime
:小于2147483647
的大质数inverse
:逆质数,以便(PRIME * INVERSE) & MAXID == 1
random
:小于2147483647
的大随机整数
幸运的是,有一个控制台命令可以为您完成所有这些,只需运行以下命令
php vendor/bin/optimus spark
将生成的整数复制粘贴到连接配置中。
用法
OptimusManager
这是最感兴趣的类。它绑定到 ioc 容器中的 optimus
,可以通过 Facades\Optimus
门面访问。这个类通过扩展 AbstractManager 实现了 ManagerInterface。接口和抽象类都是 Graham Campbell 的 GitHub 上的 Laravel Manager 包的一部分,因此您可能想查看该存储库中的文档,了解如何使用管理器类。请注意,返回的连接类始终是 Jenssegers\Optimus\Optimus
的一个实例。
Facades\Optimus
此门面将动态地将静态方法调用传递到 ioc 容器中的 optimus
对象,默认情况下是 OptimusManager
类。
Providers\OptimusServiceProvider
此类不包含任何有趣的公共方法。应在 config/app.php
中的 providers 数组中添加此类。此类将设置 ioc 绑定。
Traits\OptimusEncodedRouteKey
此特性可以用于 Eloquent 模型,以启用自动路由模型绑定。您可以在路由闭包或控制器中为模型提供类型提示,然后 Laravel 将根据编码后的 ID 尝试查找它。
示例
在这里,您可以看到这个包是如何简单易用的。默认适配器是 main
。在配置文件中输入您的身份验证详细信息后,它就可以正常工作了。
编码 ID
Cog\Laravel\Optimus\Facades\Optimus::encode(20); // 1535832388
解码 ID
Cog\Laravel\Optimus\Facades\Optimus::decode(1535832388); // 20
更改 Optimus 连接
Optimus 管理器将表现得像 Jenssegers\Optimus\Optimus
。如果您想调用特定的连接,可以使用连接方法。
use Cog\Laravel\Optimus\Facades\Optimus; // Writing this… Optimus::connection('main')->encode($id); // …is identical to writing this Optimus::encode($id); // and is also identical to writing this. Optimus::connection()->encode($id); // This is because the main connection is configured to be the default. Optimus::getDefaultConnection(); // This will return main. // We can change the default connection. Optimus::setDefaultConnection('alternative'); // The default is now alternative.
依赖注入
如果您像我一样喜欢使用依赖注入而不是门面,则可以注入管理器。
use Cog\Laravel\Optimus\OptimusManager; class Foo { protected $optimus; public function __construct(OptimusManager $optimus) { $this->optimus = $optimus; } public function bar($id) { return $this->optimus->encode($id) } } app()->make('Foo')->bar(20);
隐式路由模型绑定
要启用基于编码 ID 的 隐式路由模型绑定,您只需 配置素数 并在您的模型中使用 Cog\Laravel\Optimus\Traits\OptimusEncodedRouteKey
特性。
如果您不想使用默认的 Optimus 连接,您可以在模型中添加一个 $optimusConnection
属性来指定自定义连接。
use Cog\Laravel\Optimus\Traits\OptimusEncodedRouteKey; use Illuminate\Database\Eloquent\Model; class YourModel extends Model { use OptimusEncodedRouteKey; protected $optimusConnection = 'custom'; // optional }
现在您可以在路由闭包或控制器中为模型提供类型提示,然后 Laravel 将使用编码后的 ID 查询数据库。
注意:隐式路由模型绑定需要 Laravel 的 Illuminate\Routing\Middleware\SubstituteBindings
中间件,它是 web
中间件组的一部分。
Route::get('url/to/{model}', function (YourModel $model) { // ... })->middleware('web');
要生成这些路由的 URL,您可以选择获取编码的路由键。
$encodedId = $model->getRouteKey(); $url = url("url/to/{$encodedId}");
或者,您可以使用命名路由并传递模型。Laravel 将完成其余的工作。
$url = route('my.named.route', $model);
变更日志
有关最近更改的更多信息,请参阅 CHANGELOG。
贡献
有关详细信息,请参阅 CONTRIBUTING。
测试
使用以下命令运行测试:
vendor/bin/phpunit
安全
如果您发现任何安全问题,请通过电子邮件发送至 anton@komarev.com,而不是使用问题跟踪器。
贡献者
此包受到 Laravel Hashids 包的启发。
此包是对 Optimus 库 的封装。
替代方案
请随时通过拉取请求添加更多替代方案。
许可
Laravel Optimus
包是一款开源软件,由 MIT 许可证授权,由 Anton Komarev 开发。
🌟 随时间推移的 Star 数量
关于CyberCog
CyberCog 是一个由爱好者组成的社交联盟。研究产品与软件开发中的最佳解决方案是我们的热情所在。