Download the PHP package rasuvaeff/yii3-feature-flags-db without Composer
On this page you can find all versions of the php package rasuvaeff/yii3-feature-flags-db. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download rasuvaeff/yii3-feature-flags-db
More information about rasuvaeff/yii3-feature-flags-db
Files in rasuvaeff/yii3-feature-flags-db
Package yii3-feature-flags-db
Short Description Database-backed feature flag provider for Yii3 applications
License BSD-3-Clause
Homepage https://github.com/rasuvaeff/yii3-feature-flags-db
Informations about the package yii3-feature-flags-db
rasuvaeff/yii3-feature-flags-db
Database-backed feature flag provider for Yii3 applications. Implements the FlagProvider interface from rasuvaeff/yii3-feature-flags and reads flag configuration from a database table in a single query.
Using an AI coding assistant? llms.txt contains a compact API reference you can ingest in your prompt context.
Requirements
- PHP 8.3+
rasuvaeff/yii3-feature-flags^1.0yiisoft/db^2.0yiisoft/db-migration^2.0 (ships the table migration)yiisoft/definitions^3.0 (DIReferenceforWritableFlagProvider)- a PSR-16 cache implementation — required transitively by
yiisoft/db2.0 (e.g.yiisoft/cache)
Installation
With Yii3 config-plugin this package binds both FlagProvider and
WritableFlagProvider to the same instance — do not also bind either key in
your application or another backend, or yiisoft/config reports a
Duplicate key error.
Database schema
Create the feature_flags table (adjust types for your RDBMS):
| Column | Type | Default | Description |
|---|---|---|---|
name |
VARCHAR(190) PK |
— | Flag name (core regex: /^[a-z][a-z0-9._-]*$/) |
enabled |
BOOLEAN |
true |
Whether the flag is active |
salt |
VARCHAR(190) |
'' |
Empty string falls back to flag name |
rollout |
SMALLINT |
100 |
Percentage 0..100 |
kill_switch |
BOOLEAN |
false |
Emergency off switch |
environments |
JSON/TEXT |
'[]' |
JSON array of strings |
Migration
The package ships a migration (migrations/) for yiisoft/db-migration.
Register the source path in your app's config/params.php:
Then apply and revert it with Yii Console:
The table name defaults to feature_flags and must match the table argument of
DbFlagProvider. To use a custom name, bind the migration constructor argument:
Usage
Basic DB provider
With PSR-16 caching
Clear cache
Writing flags
DbFlagProvider and CachedFlagProvider both implement
WritableFlagProvider. Use them for programmatic CRUD or an admin UI.
save()is an upsert keyed byname(insert or replace).remove()is idempotent: deleting a missing name is a no-op.CachedFlagProvideris write-through: after a successfulsave()/remove()it clears its cache before returning, so the next read reflects the change. When the inner provider is read-only (e.g.ConfigFlagProvider), write calls are silent no-ops — wrap a config provider safely without exceptions.- Salt is normalized:
Flag::__construct()replaces an empty salt with the flag name. On write the row stores''wheneversalt === nameso the round-trip read keeps the same invariant (emptySaltFallsBackToName). - Environments are encoded through
FlagRowMapper::encodeEnvironments()and decoded throughextractEnvironments(). Round-trip is guaranteed.
Writable DI binding
config/di.php binds WritableFlagProvider to the same instance as
FlagProvider via Yiisoft\Definitions\Reference:
Inject WritableFlagProvider in write paths and FlagProvider in read paths;
both resolve to the same object.
API reference
| Class | Description |
|---|---|
DbFlagProvider |
Reads all flags from DB in one SELECT *; implements WritableFlagProvider |
CachedFlagProvider |
PSR-16 decorator with write-through cache; implements WritableFlagProvider |
FlagRowMapper |
@internal row ↔ Flag mapper; also exposes encodeEnvironments() |
InvalidFlagRowException |
Thrown when a DB row has invalid structure |
Security
- Kill switch, rollout hash logic, and environment targeting remain in the core package — the DB adapter is only a configuration source.
- Invalid row data (missing columns, malformed JSON, wrong types, out-of-range rollout, invalid flag name) throws
InvalidFlagRowExceptioninstead of silently enabling features. Core validation errors are wrapped, so callers only need to catchInvalidFlagRowException. - No SQL injection risk: table name is quoted via yiisoft/db quoter.
Examples
See examples/ for runnable scripts.
Development
License
BSD-3-Clause. See LICENSE.md.
All versions of yii3-feature-flags-db with dependencies
psr/simple-cache Version ^3.0
rasuvaeff/yii3-feature-flags Version ^1.0
yiisoft/db Version ^2.0
yiisoft/db-migration Version ^2.0
yiisoft/definitions Version ^3.0