aubes/openfeature-flagd-bundle
composer require aubes/openfeature-flagd-bundle symfony/http-client nyholm/psr7
config/bundles.php:
Aubes\OpenFeatureFlagdBundle\OpenFeatureFlagdBundle::class => ['all' => true],
config/packages/open_feature_flagd.yaml:
open_feature_flagd:
host: '%env(FLAGD_HOST)%' # e.g., 'localhost' or 'flagd-service'
port: 8013
Inject the FlagdProvider and use OpenFeature’s API:
use OpenFeature\OpenFeatureAPI;
use OpenFeature\Providers\Flagd\FlagdProvider;
class FeatureService {
public function __construct(private FlagdProvider $provider) {}
public function checkDarkMode(): bool {
return OpenFeatureAPI::getInstance()
->setProvider($this->provider)
->getClient()
->getBooleanValue('dark_mode', false);
}
}
OpenFeatureAPI::getInstance()->setProvider($flagdProvider);
$client = OpenFeatureAPI::getInstance()->getClient();
$isEnabled = $client->getBooleanValue('feature_x', false);
$context = new Context(['userId' => '123']);
$client->getBooleanValue('premium_feature', false, $context);
FlagdProvider directly or via OpenFeatureAPI.# config/packages/framework.yaml
framework:
http_client:
scoped_clients:
flagd.client:
base_uri: 'http://flagd:8013'
timeout: 3
# config/packages/open_feature_flagd.yaml
open_feature_flagd:
http_client: flagd.client
Use the bundle alongside aubes/openfeature-bundle for framework-level features (e.g., attributes, Twig helpers):
# config/packages/open_feature.yaml
open_feature:
provider: OpenFeature\Providers\Flagd\FlagdProvider
Then annotate controllers:
#[FeatureGate('analytics_enabled')]
public function analyticsDashboard(): Response { ... }
Flagd Server Dependency:
docker run -p 8013:8013 openfeature/flagd
FLAGD_HOST=localhost and check Flagd logs for connection errors.Protocol Mismatch:
open_feature_flagd:
protocol: grpc
grpc/grpc).Context Serialization:
$context = new Context(['user' => (array)$userEntity]);
framework:
http_client:
scoped_clients:
flagd.client:
base_uri: '%env(FLAGD_URL)%'
logger: true # Logs requests/responses
flagd eval to test flags manually:
flagd eval --host localhost:8013 --flag dark_mode
aubes/openfeature-bundle for flag evaluation metrics in the profiler.FlagdProvider service to add middleware (e.g., auth headers):
services:
OpenFeature\Providers\Flagd\FlagdProvider:
arguments:
$client: '@custom.flagd.client'
ProviderDidChange) for analytics:
OpenFeatureAPI::getInstance()->addListener(new MyFlagEventListener());
FlagdProvider in tests:
$mockProvider = $this->createMock(FlagdProvider::class);
$mockProvider->method('getBooleanValue')->willReturn(true);
OpenFeatureAPI::getInstance()->setProvider($mockProvider);
How can I help you explore Laravel packages today?