netsells / hash-model-ids
动态创建一个 Eloquent 模型 id 值的哈希值,以避免暴露记录的实际数据库 id。
v2.0.0
2024-03-28 09:25 UTC
Requires
- php: ^8.2
- hashids/hashids: ^5.0
- illuminate/contracts: ^10.0|^11.0
- illuminate/database: ^10.0|^11.0
- illuminate/support: ^10.0|^11.0
- illuminate/validation: ^10.0|^11.0
Requires (Dev)
- orchestra/testbench: ^8.0|^9.0
README
动态创建一个 Eloquent 模型 id 值的哈希值,以避免暴露记录的实际数据库 id。
功能
use Netsells\HashModelIds\HashesModelIdsTrait; class Model extends BaseModel { use HashesModelIdsTrait; }
在 Eloquent 模型中使用 HashesModelIdsTrait
来启用以下功能
- 访问模型的哈希 id 值:
$model->hashed_id
- 通过一个哈希 id 数组或单个哈希 id 过滤模型
Model::whereHashedId($hashedId)
Model::whereHashedIds($hashedIds)
- 使用模型绑定其哈希 id 定义路由
Route::get('models/{model}', function (Model $model) { return $model; }); $url = url("models/$model->hashed_id");
- 在表单请求类中使用自定义规则检查模型是否存在,可选地包括额外的链式约束
public function rules() { return [ 'hashed_id' => [ ExistsWithHashedIdRule::make(Model::class) ->where(function ($query) { $query->where('type', 'test'); }) ->where('foo', 'bar'), ], ]; }
安装
使用以下命令安装包
composer require netsells/hash-model-ids
发布包配置文件
php artisan vendor:publish --tag=hash-model-ids-config
可选地,在 .env
中设置 HASH_MODEL_IDS_SALT
。
翻译
发布包翻译文件
php artisan vendor:publish --tag=hash-model-ids-lang
开发
有时,在开发过程中,处理哈希 id 可能会很尴尬。在环境文件中将 HASH_MODEL_IDS_ENABLED=false
设置为启用使用(可配置的)前缀版本的实际模型 id 而不是默认的哈希版本。
测试
./vendor/bin/phpunit