Toggles¶
Toggles are reusable code snippets that enable/disable a feature. A toggle can be created to enable a feature by an IP address or something as simple as a configuration value.
A toggle is also passed an array that is used to configure the toggle.
Creating Custom Toggles¶
All toggles must implement the FeatureToggleInterface.
By creating a custom toggle, you can change the logic for figuring out if a feature is enable or not. Some ideas for custom toggles include:
- IP Based, can enable a feature if the user is on an internal network.
- Username, or something similar.
- Collection, a collection of toggles where it checks for any or all to be enable.
- Gradual, where you can release a feature to x% of a user base.
Creating a custom toggle based on username¶
You can create a custom feature toggle with ease.
<?php
use Symfony\Component\Security\Core\User\UserInterface;
use JoshuaEstes\Component\FeatureToggle\Toggle\FeatureToggle;
use JoshuaEstes\Component\FeatureToggle\FeatureInterface;
class FeatureToggleUsername extends FeatureToggle
{
/**
* @var UserInterface
*/
protected $user;
/**
* Dependency injection
*
* @param UserInterface $user
*/
public function setUser(UserInterface $user)
{
$this->user = $user;
}
/**
* Used to set the options that are allowed to be used with this toggle
*
* @param OptionsResolver $resolver
*/
protected function configureOptions(OptionsResolver $resolver)
{
$resolver->setRequired(
array(
'username'
)
);
}
/**
* Check some settings and return true if the feature should be enabled
*
* @param FeatureInterface $feature
*/
public function isEnabled(FeatureInterface $feature)
{
return $this->options['username'] == $this->user->getUsername();
}
}
Now that we have the toggle, we just need to create the toggle and assign it to a feature object.
<?php
use JoshuaEstes\Component\FeatureToggle\FeatureBuilder;
$toggle = new FeatureToggleUsername(
array(
'username' => 'joshua',
)
);
$toggle->setUser($user);
$feature = FeatureBuilder::create('enable_for_joshua')
->setFeatureToggle($toggle)
->getFeature();
That’s all there is to it! Note that the $user variable needs to be defined and must have a method getUsername. This feature will return true only for the user with the username joshua and will return false for all other users.