dereuromark / cakephp-hashid
此软件包已被废弃,不再维护。未建议替代包。
CakePHP 插件,允许使用 hashids 而不是数字主键。
1.4.1
2020-02-20 19:39 UTC
Requires
- php: >=5.6
- cakephp/cakephp: ^3.6
- hashids/hashids: ^1.0|^2.0|^3.0|^4.0
Requires (Dev)
- fig-r/psr2r-sniffer: dev-master
README
将 hashids 暴露为您的数字主键的即插即用替代品。
已弃用 此插件已被弃用,转而使用通过暴露专用字段提供的更稳健、更可靠的解决方案。请参阅 Expose 插件。
一个 CakePHP 插件,用于
- 将实际数字主键隐藏在记录之后(假设您使用非公开盐值)以供 URL、API 等使用
- 构建简短的唯一 ID(例如,即使是 PHP_INT_MAX
2.147.483.647
也变为lXQAALg
,因此 hashid 的长度 <= 7)
此分支适用于 CakePHP 3.6+。有关详细信息,请参阅 版本映射。
为什么选择 hashids?
- 它们非常短,尤其是对于 URL
- 它们轻量级且 快速。它们即时工作,不需要表字段,无需更改代码。除了启用行为之外,没有额外的开销。
- 与 UUIDs 一样,您不会失去排序能力。
- 如果您不想将数据库 ID 暴露给用户,则可以使用 hashids - 而不会影响速度 - 作为权衡特性。
为什么不使用 UUIDs?
- 随着 DB 表的增长、复杂或重量级联接以及尤其是与 CakePHP 默认 char(36) 相比,UUIDs 可以慢 200 倍。但即使是推荐的 binary(16) 也不是理想的。
- UUIDs 通常会完全替换主键,使得无法对那些记录进行排序。这对于同时插入的数据(相同的创建时间)尤其有问题。
- UUIDs 通常用于仅隐藏数字主键的可见性,以表示随着时间的推移插入了多少数据。但这不是它们应该用于的目的。如果您想要跨 DB 同步数据,则它们是有用的。但它们不应被滥用于其他目的。
更新 如果结合 AIID 和 UUIDs,并且仅使用 UUIDs 进行外部查找,而保留 AIID 进行所有内部联接和操作,则这实际上并不成立。因此,Expose 插件现在完全取代了它。
演示
请参阅 https://sandbox3.dereuromark.de/sandbox/hashids
设置
composer require dereuromark/cakephp-hashid
和
bin/cake plugin load Hashid
使用
请参阅 文档。
替代方案
参阅这篇文章,它介绍了另一种方法,该方法同时使用两种——内部使用“int”,外部使用“uuid”作为参考。