Laravel Pennant, iki ana sürücüyü destekleyen esnek bir depolama sistemi kullanarak özel bayrak değerlerini depolar ve alır: bellek içi bir dizi sürücüsü ve kalıcı bir veritabanı sürücüsü.
Depolama Mekanizmaları:
- Dizi Sürücüsü: Bu sürücü, bellek içi bir dizide çözülmüş özellik bayrağı değerlerini saklar. Hızlı ama geçicidir, yani depolanan özellik bayrağı değerleri yalnızca geçerli istek yaşam döngüsü sırasında mevcuttur ve daha sonra kaybolur. Bu, kalıcılığın gerekli olmadığı basit veya geçici kullanım durumları için kullanışlıdır.
- Veritabanı Sürücüsü (Varsayılan): Flama, ilişkisel bir veritabanında, özellikle Flama'nin geçişlerini çalıştırarak oluşturulan bir `özellik 'tablosunda özellik bayrağı değerlerini devam ettirebilir. Bu sürücü, çözülen özellik bayrağı değerlerini sürekli olarak saklayarak değerlerin birden fazla istek ve sunucuda paylaşılmasına izin verir. Birden çok sunucuda veya sunucusuz ortamlarda çalışan uygulamalar için idealdir. Veritabanı sürücüsü ayrıca, aynı özellik bayrağı için tekrarlanan veritabanı sorgularını önlemek için tek bir istek sırasında bellek içi bir önbellek kullanır [1] [2] [5].
Özellik bayrakları nasıl tanımlanır ve çözülür:
- Özellik bayrakları, bir özelliğin etkin olup olmadığını belirlemek için mantığı içeren kapanışlar kullanılarak tanımlanır. Bu kapanışlar, doğrulanmış kullanıcı gibi parametreleri kabul ederek kapsamlı özellik bayraklarına izin verebilir (örneğin, yalnızca yönetici kullanıcıları için bir özellik sağlayan).
- Bir özellik bayrağı ilk olarak belirli bir kapsam (kullanıcı gibi) için kontrol edildiğinde, flama özelliğin değerini çözmek için kapatmayı yürütür. Bu çözülmüş değer daha sonra yapılandırılmış depolama sürücüsünde (dizi veya veritabanı) saklanır.
- Aynı özellik ve kapsam için sonraki kontrollerde, flama, depolanan değeri depolama sürücüsünden yeniden hesaplamak yerine alır ve bu da performansı optimize eder [2] [3].
Özellik bayrağı değerlerini almak:
-Boolean veya başka bir veri türü (zengin-değer bayrakları) olabilen değerini elde etmek için (boolean) veya `` özelliği ('özellik adı') `` özellik :: active ('özellik adı') 'gibi yöntemleri kullanarak tek bir özellik bayrağının değerini alabilirsiniz.
- Pennant ayrıca, belirli bir kapsam için tanımlanmış tüm özellikleri elde etmek için `` özelliği :: ['Featurent1', 'Özellik2']) `veya` özelliği :: All () 'gibi birden fazla özellik bayrağı değerlerini almaya yönelik yöntemler sağlar.
- Özellik sınıfları, tüm özellik bayraklarını alırken dahil edildiğinden emin olmak için dinamik olarak keşfedilebilir ve kaydedilebilir [1] [2].
Özet:
Laravel Pennant, kullanıcı tanımlı mantık kapanışlarını çalıştırarak özellik bayrağı değerlerini çözer ve daha sonra bu çözülmüş değerleri geçici olarak bellek içi bir dizide veya bir veritabanı tablosunda kalıcı olarak saklar. Bu depolama mekanizması, flama, yeniden hesaplanmadan sonraki isteklerde özellik bayrağı durumlarını verimli bir şekilde almasını sağlar ve kullanıcı başına kapsamlı bayraklar da dahil olmak üzere hem basit hem de karmaşık kullanım durumlarını destekler. Varsayılan ve önerilen yaklaşım, veritabanı sürücüsünü, özellikle çoklu sunucu veya üretim ortamlarında kalıcı depolama için kullanmaktır, dizi sürücüsü geçici veya test senaryolarına uygundur [1] [2] [5].
Alıntılar:
[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_and_lightweight_feature/
[4] https://redberry.international/laravel-pennant-feature-flagging-mee-usy/
[5] https://wpwebinfotech.com/blog/laravel-pennant-guide/
[6] https://dev.to/saurabh-dhariwal/how-to-manage-feature-flags-with-fennant-in-2024-1phb
[7] https://stackoverflow.com/questions/77751003/laravel-pennant-tore-against-session-for--b-testing
[8] https://laracasts.com/series/whats-new-in-laravel-10/episodes/5