Laravel Pennant使用灵活的存储系统来存储并检索功能标志值,该系统支持两个主要驱动程序:内存数组驱动程序和持久数据库驱动程序。
存储机制:
- 数组驱动程序:此驱动程序存储已解决的功能标志值在内存数组中。它是快速但瞬态的,这意味着仅在当前请求生命周期中存储的特征标志值仅存在,然后丢失。这对于不需要持久性的简单或临时用例很有用。
- 数据库驱动程序(默认值):pennant可以在关系数据库中持续特征标志值,特别是在运行Pennant的迁移创建的“功能”表中。该驱动程序可持续存储已解决的特征标志值,从而可以通过多个请求和服务器共享值。它是在多个服务器或无服务器环境上运行的应用程序的理想选择。数据库驱动程序还在单个请求期间还使用内存缓存,以避免对同一功能标志的重复数据库查询,从而改善性能[1] [2] [5]。
如何定义和解决功能标志:
- 功能标志是使用包含逻辑的封闭式定义的,以确定功能是否处于活动状态。这些关闭可以接受参数,例如身份验证的用户,允许使用范围的功能标志(例如,仅适用于管理用户)。
- 当首先检查特定范围(例如用户)时,Pennant执行闭合以解决该功能的值。然后将此解析值存储在配置的存储驱动程序(数组或数据库)中。
- 在随后检查相同功能和范围的后续检查中,Pennant从存储驱动程序中检索存储的值,而不是重新计算它,从而优化性能[2] [3]。
检索特征标志值:
- 您可以使用``feature :: active('feature-name'')之类的方法检索单个功能标志的值```'''''''nitabled(boolean)还是`feation :: value :: value('feature-name')`以获取其值,以获取其值,这可以是boolean或任何其他数据类型(Rich-value标志)。
- Pennant还提供了一次检索多个功能标志值的方法,例如``'feature :: values(['feature1','features2'])或`feation :: all()`以获取给定范围的所有定义功能。
- 功能类可以动态发现和注册,以确保在检索所有功能标志时包括它们[1] [2]。
概括:
Laravel Pennant通过运行用户定义的逻辑闭合来解决特征标志值,然后将这些解决值暂时存储在内存数组中,或在数据库表中持久存储。这种存储机制允许Tenant在不重新计算的情况下有效地检索功能标志状态,从而支持简单和复杂的用例,包括每个用户的示波器标志。默认和建议的方法是将数据库驱动程序用于持久存储,尤其是在多服务器或生产环境中,而数组驱动程序适合瞬态或测试方案[1] [2] [5]。
引用:
[1] https://laravel.com/docs/11.x/pennant
[2] https://www.honeybadger.io/blog/a-guide-to-feature-feature-flags-in-laravel/
[3] https://www.reddit.com/r/laravel/comments/10yto7q/laravel_pennant_simple_simple_and_lightweight_feature/
[4] https://redberry.international/laravel-pennant-feature-feature-fatging-made-made-easy/
[5] https://wpwebinfotech.com/blog/laravel-pennant-guide/
[6] https://dev.to/saurabh-dhariwal/how-to-to-manage-feature-feature-flags-with-laravel-pennant-in-2024-1phb
[7] https://stackoverflow.com/questions/777751003/laravel-pennant-store-store-against-session-for-a-b testing
[8] https://laracasts.com/series/whats-new-inew-in-laravel-10/episodes/5