mikefrancis / laravel-unleash
An Unleash client for Laravel
Fund package maintenance!
mikefrancis
Installs: 124 073
Dependents: 1
Suggesters: 0
Security: 0
Stars: 62
Watchers: 3
Forks: 31
Open Issues: 7
Requires
- guzzlehttp/guzzle: ^6.3|^7.0
- illuminate/contracts: ^5.8|^6|^7|^8|^9|^10.0
- illuminate/http: ^5.8|^6|^7|^8|^9|^10.0
- illuminate/support: ^5.8|^6|^7|^8|^9|^10.0
Requires (Dev)
- phpunit/phpunit: ^9.5.10
- squizlabs/php_codesniffer: ^3.5
README
An Unleash client for Laravel.
Installation
composer require mikefrancis/laravel-unleash
Export package config:
php artisan vendor:publish --provider="MikeFrancis\LaravelUnleash\ServiceProvider"
Configuration
Documentation for configuration can be found in config/unleash.php.
Usage
use \MikeFrancis\LaravelUnleash\Unleash; $unleash = app(Unleash::class); if ($unleash->isFeatureEnabled('myAwesomeFeature')) { // Congratulations, you can see this awesome feature! } if ($unleash->isFeatureDisabled('myAwesomeFeature')) { // Check back later for more features! } $feature = $unleash->getFeature('myAwesomeFeature'); $allFeatures = $unleash->getFeatures();
Facades
You can use the Unleash
facade:
use Unleash; if (Unleash::isFeatureEnabled('myAwesomeFeature')) { // Congratulations, you can see this awesome feature! } if (Unleash::isFeatureDisabled('myAwesomeFeature')) { // Check back later for more features! } $feature = Unleash::getFeature('myAwesomeFeature'); $allFeatures = Unleash::getFeatures();
or use the generically named Feature
facade:
use Feature; if (Feature::enabled('myAwesomeFeature')) { // Congratulations, you can see this awesome feature! } if (Feature::disabled('myAwesomeFeature')) { // Check back later for more features! } $feature = Feature::get('myAwesomeFeature'); $allFeatures = Feature::all();
Dynamic Arguments
If your strategy relies on dynamic data at runtime, you can pass additional arguments to the feature check functions:
use \MikeFrancis\LaravelUnleash\Unleash; use Config; $unleash = app(Unleash::class); $allowList = config('app.allow_list'); if ($unleash->isFeatureEnabled('myAwesomeFeature', $allowList)) { // Congratulations, you can see this awesome feature! } if ($unleash->isFeatureDisabled('myAwesomeFeature', $allowList)) { // Check back later for more features! }
Blade
Blade directive for checking if a feature is enabled:
@featureEnabled('myAwesomeFeature') Congratulations, you can see this awesome feature! @endfeatureEnabled
Or if a feature is disabled:
@featureDisabled('myAwesomeFeature') Check back later for more features! @endfeatureDisabled
You cannot currently use dynamic strategy arguments with Blade template directives.
Middleware
This package includes middleware that will deny routes depending on whether a feature is enabled or not.
To use the middle, add the following to your app/Http/Kernel.php
:
protected $routeMiddleware = [ // other middleware 'feature.enabled' => \MikeFrancis\LaravelUnleash\Middleware\FeatureEnabled::class, 'feature.disabled' => \MikeFrancis\LaravelUnleash\Middleware\FeatureDisabled::class, ];
You can then use the middleware in your routes:
Route::get('/new-feature-path', function () { // })->middleware('feature.enabled:myAwesomeFeature'); Route::get('/terrible-legacy-path', function () { // })->middleware('feature.disabled:myAwesomeFeature');
or in your controllers like so:
class ExampleController extends Controller { public function __construct() { $this->middleware('feature.enabled:myAwesomeFeature'); // or $this->middleware('feature.disabled:myAwesomeFeature'); } }
You cannot currently use dynamic strategy arguments with Middleware.