Laravel Pennant butikker og henter funktionsflagværdier ved hjælp af et fleksibelt lagringssystem, der understøtter to hoveddrivere: en in-memory array driver og en vedvarende databasedriver.
Opbevaringsmekanismer:
- Array Driver: Denne driver gemmer løst funktionsflagværdier i et array-hukommelse. Det er hurtigt, men kortvarigt, hvilket betyder, at de gemte funktionsflagværdier kun findes i løbet af den aktuelle anmodning om livscyklus og går tabt bagefter. Dette er nyttigt til enkle eller midlertidige brugssager, hvor vedholdenhed ikke er påkrævet.
- Database Driver (standard): Pennant kan vedvare funktionsflagværdier i en relationel database, specifikt i en "funktion" -tabel oprettet ved at køre Pennants migrationer. Denne driver gemmer de opløste funktionsflagværdier vedvarende, så værdierne deles på tværs af flere anmodninger og servere. Det er ideelt til applikationer, der kører på flere servere eller serverløse miljøer. Databasedriveren bruger også en cache i hukommelsen under en enkelt anmodning for at undgå gentagne databaseforespørgsler for det samme funktionsflag, hvilket forbedrer ydelsen [1] [2] [5].
Hvordan funktionsflag er defineret og løst:
- Funktionsflag defineres ved hjælp af lukninger, der indeholder logikken for at bestemme, om en funktion er aktiv eller ej. Disse lukninger kan acceptere parametre, såsom den godkendte bruger, hvilket giver mulighed for scoped funktionsflag (f.eks. Aktivering af en funktion kun for admin -brugere).
- Når et funktionsflag først kontrolleres for et givet omfang (f.eks. En bruger), udfører Pennant lukningen for at løse funktionens værdi. Denne opløste værdi gemmes derefter i den konfigurerede lagringsdriver (array eller database).
- Ved efterfølgende kontroller for den samme funktion og omfang henter Pennant den gemte værdi fra lagringsdriveren i stedet for at genberegne den, der optimerer ydelsen [2] [3].
Hentning af funktionsflagværdier:
-Du kan hente værdien af et enkelt funktionsflag ved hjælp af metoder som `funktion :: Active ('Feature-Name') 'for at kontrollere, om det er aktiveret (boolsk) eller' funktion :: værdi ('funktionsnavn') 'for at få sin værdi, som kan være boolsk eller anden datatype (Rich-Value Flags).
- Pennant leverer også metoder til at hente flere funktionsflagværdier på én gang, såsom `funktion :: værdier (['funktion1', 'funktion2'])` eller `funktion :: alle ()` for at få alle definerede funktioner til et givet omfang.
- Funktionsklasser kan opdages og registreres dynamisk for at sikre, at de er inkluderet, når de henter alle funktionsflag [1] [2].
Oversigt:
Laravel Pennant løser funktionsflagværdier ved at køre brugerdefinerede logiklukninger og gemmer derefter disse løst værdier enten midlertidigt i et in-memory-array eller vedvarende i en databasetabel. Denne lagringsmekanisme giver vimpel mulighed for effektivt at hente funktionsflagstilstande på efterfølgende anmodninger uden at beregne genberegn, hvilket understøtter både enkle og komplekse brugssager, herunder scoped -flag pr. Bruger. Standard- og anbefalet tilgang er at bruge databasedriveren til vedvarende opbevaring, især i multi-server- eller produktionsmiljøer, mens array-driveren passer til kortvarige eller testscenarier [1] [2] [5].
Citater:
[1] https://laravel.com/docs/11.x/pennant
[2] https://www.honeybadger.io/blog/a-guide-to-feature-flags-in-laravel/
[3] https://www.reddit.com/r/laravel/comments/10yto7q/laravel_pennant_simple
[4] https://redberry.international/laravel-pennant-feature-flagging-aeasy/
[5] https://wpwebinfotech.com/blog/laravel-pennant-guide/
[6] https://dev.to/saurabh-dhariwal/how-to-manage-featur-flags-with-laravel-pennant-in-2024-1PHB
[7] https://stackoverflow.com/questions/77751003/laravel-pennant-store-genainst-session-for-a-b-testing
[8] https://laracasts.com/series/whats-new-in-laravel-10/episodes/5