O Laravel Pennant Stores e Recupera apresenta valores de sinalizador usando um sistema de armazenamento flexível que suporta dois drivers principais: um driver de matriz na memória e um driver de banco de dados persistente.
Mecanismos de armazenamento:
- Driver de matriz: este driver armazena os valores do sinalizador de recursos resolvidos em uma matriz na memória. É rápido, mas transitório, o que significa que os valores do sinalizador de recursos armazenados existem apenas durante o ciclo de vida da solicitação atual e são perdidos posteriormente. Isso é útil para casos de uso simples ou temporários em que a persistência não é necessária.
- Driver de banco de dados (padrão): o galhardete pode persistir valores de sinalizador de recursos em um banco de dados relacional, especificamente em uma tabela `recursos 'criada pela execução das migrações da Pennant. Esse driver armazena os valores de sinalizador de recursos resolvidos com persistência, permitindo que os valores sejam compartilhados em várias solicitações e servidores. É ideal para aplicativos em execução em vários servidores ou ambientes sem servidor. O driver do banco de dados também usa um cache na memória durante uma única solicitação para evitar consultas repetidas no banco de dados para o mesmo sinalizador de recursos, melhorando o desempenho [1] [2] [5].
Como os sinalizadores de recursos são definidos e resolvidos:
- Os sinalizadores de recursos são definidos usando fechamentos que contêm a lógica para determinar se um recurso está ativo ou não. Esses fechamentos podem aceitar parâmetros como o usuário autenticado, permitindo sinalizadores de recursos com escopo (por exemplo, permitindo um recurso apenas para usuários administrativos).
- Quando um sinalizador de recurso é verificado pela primeira vez para um determinado escopo (como um usuário), o galhardete executa o fechamento para resolver o valor do recurso. Esse valor resolvido é então armazenado no driver de armazenamento configurado (matriz ou banco de dados).
- Nas verificações subsequentes para o mesmo recurso e escopo, o galhardete recupera o valor armazenado do driver de armazenamento em vez de recalculá -lo, o que otimiza o desempenho [2] [3].
Recuperando os valores do sinalizador de recursos:
-Você pode recuperar o valor de um único sinalizador de recurso usando métodos como `recurso :: ativo ('nome-name')` para verificar se ele está ativado (booleano) ou `recurso :: value ('nome-name') para obter seu valor, que pode ser booleano ou qualquer outro tipo de dados (sinalizadores de valor rico).
- O Pennant também fornece métodos para recuperar vários valores do sinalizador de recursos de uma só vez, como `recurso :: valores (['recurso1', 'recurso2'])` ou `recurso :: all ()` para obter todos os recursos definidos para um determinado escopo.
- As classes de recursos podem ser descobertas e registradas dinamicamente para garantir que sejam incluídas ao recuperar todos os sinalizadores de recursos [1] [2].
Resumo:
O Laravel Pennant resolve os valores do sinalizador de recursos executando o fechamento lógico definido pelo usuário e, em seguida, armazena esses valores resolvidos temporariamente em uma matriz na memória ou persistentemente em uma tabela de banco de dados. Esse mecanismo de armazenamento permite que o Pennant recupere eficientemente os estados da bandeira de recursos nas solicitações subsequentes sem recalcular, suportando casos de uso simples e complexos, incluindo bandeiras escopinhas por usuário. A abordagem padrão e recomendada é usar o driver de banco de dados para armazenamento persistente, especialmente em ambientes multi-servidor ou de produção, enquanto o driver da matriz se adapta aos cenários de transitórios ou testes [1] [2] [5].
Citações:
[1] https://laravel.com/docs/11.x/pennant
[2] https://www.honeybadger.io/blog/a-guide-to-feature-flags-s--laravel/
[3] https://www.reddit.com/r/laravel/comments/10yto7q/laravel_pennant_simple_and_lightweight_feature/
[4] https://redberry.international/laravel-pennant-feature-flagging-deasy/
[5] https://wpwebinfotech.com/blog/laravel-pennant-guide/
[6] https://dev.to/saurabh-dhariwal/how-to-manage-feature-flags-with-laravel-pennant-in-2024-1phb
[7] https://stackoverflow.com/questions/77751003/laravel-pennant-store-against-session-for--ab-thesting
[8] https://laracasts.com/series/whats-new-ch-laravel-10/episodes/5