matthiaswilbrink / laravel-feature-toggles
Toggle parts of your application on or off
Requires
- php: ^7.2
- illuminate/config: 5.8.*|6.*
- illuminate/console: 5.8.*|6.*
- illuminate/database: 5.8.*|6.*
- illuminate/support: 5.8.*|6.*
This package is not auto-updated.
Last update: 2024-05-09 22:24:36 UTC
README
Toggle parts of you application on or off with zero downtime.
Deploy your feature at night, toggle it when your boss hits that big red button.
(big red button not included)
Features
- Set the initial state of a feature in the config
- Use laravel's cache to limit database load
- Convenient commands to toggle features on/off
Installation
This package is available on composer.
To install laravel-feature-toggles you can run the following command
composer require matthiaswilbrink/laravel-feature-toggles
After installation you can publish the configuration with this command
php artisan vendor:publish --provider="MatthiasWilbrink\FeatureToggle\Providers\FeatureToggleServiceProvider"
As this package uses a database to keep track of the features' state, you'll have to migrate after installing this package
php artisan migrate
Usage
Command | Purpose |
---|---|
feature:create |
Read features from the config and inserts them into the database. Once inserted, it will never be overwritten. |
feature:list |
List all features in the database. |
feature:enable |
Enable a feature, pick from list. |
feature:disable |
Disable a feature, pick from list. |
feature:clear-cache |
Clear the feature cache, features will be stored in cache again when they are called for the first time. |
Reading
Blade
A custom blade directive has been made.
In a blade file do the following:
[...] @feature('name_of_my_feature_as_string') This will show when the feature is enabled @endfeature [...]
The else clause could also be used.
[...] @feature('name_of_my_feature_as_string') This will show when the feature is enabled. @else This will show when the feature is disabled. @endfeature [...]
Helper
The helper function feature(string $name)
return the state of the given feature.
if (feature('name_of_my_feature_as_string')){ //do something }
Facade
An alias has been registered.
// Check if a feature is enabled if (Feature::isEnabled('name_of_my_feature_as_string')){ //do something } // A shorter alias if (Feature::isOn('name_of_my_feature_as_string')){ //do something }
Dependency Injection
Of course you can inject the FeatureManager to accomplish the same goal.
public function someMethod(FeatureManager $featureManager) { if ($featureManager->isEnabled('name_of_my_feature_as_string')){ //do something } }
Other activities
You might also want to allow your users to enable or disable features. (Things like a Christmas theme come to mind)
public function turnTheSnowFlakesOn(FeatureManager $featureManager) { $featureManager->enable('homepage_snowflakes_animation'); }
A note on caching
If caching is turned on, the cache is cleared and rebuild every time a feature is enabled/disabled.
Might the need arise you can always flush the cache with php artisan feature:clear-cache
.
This will only flush the feature cache, not your regular application cache.