1. Go to this page and download the library: Download em411/feature-flag-bundle library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
namespace App\Feature;
use Ajgarlag\FeatureFlagBundle\Attribute\AsFeature;
/**
* @AsFeature("xmas")
*/
final class XmasFeature
{
public function __invoke(): bool
{
return date('m-d') === '12-25';
}
}
namespace App\Feature;
use Ajgarlag\FeatureFlagBundle\Attribute\AsFeature;
/**
* @AsFeature(name="xmas", method="isXmas")
*/
final class XmasFeature
{
public function isXmas(): bool
{
return date('m-d') === '12-25';
}
}
namespace App\Feature;
use Ajgarlag\FeatureFlagBundle\Attribute\AsFeature;
final class FeatureService
{
/**
* @AsFeature(name="weekend")
*/
public function isWeekend(): bool
{
return date('N') >= 6;
}
/**
* @AsFeature
*/
// The feature will be named "App\Feature\FeatureService::isAnotherFeature"
public function isAnotherFeature(): bool
{
return true;
}
}
use Ajgarlag\FeatureFlagBundle\FeatureCheckerInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class CheckoutController
{
private $featureChecker;
public function __construct(FeatureCheckerInterface $featureChecker)
{
$this->featureChecker = $featureChecker;
}
public function index(): Response
{
if (!$this->featureChecker->isEnabled('new_checkout')) {
throw new NotFoundHttpException();
}
// ...
}
}
namespace App\FeatureProvider;
use Ajgarlag\FeatureFlagBundle\Provider\ProviderInterface;
class MyProvider implements ProviderInterface
{
public function get(string $featureName): ?callable
{
// ...
}
}
namespace App\FeatureProvider;
use Ajgarlag\FeatureFlagBundle\Provider\ProviderInterface;
use App\Repository\FeatureAssignmentRepository;
final class DoctrineProvider implements ProviderInterface
{
private $featureAssignmentRepository;
public function __construct(FeatureAssignmentRepository $featureAssignmentRepository)
{
$this->featureAssignmentRepository = $featureAssignmentRepository;
}
public function get(string $featureName): ?callable
{
// Set context. Example: user identifier, IP, hostname, etc.
$context = [];
return function () use ($featureName, $context) {
return $this->featureAssignmentRepository->featureIsEnabled($featureName, $context);
};
}
}
namespace App\FeatureProvider;
use Ajgarlag\FeatureFlagBundle\Provider\ProviderInterface;
use Symfony\Component\Security\Core\Security;
use Unleash\Client\Configuration\UnleashContext;
use Unleash\Client\Unleash;
class GitlabProvider implements ProviderInterface
{
private $unleash;
private $security;
public function __construct(Unleash $unleash, Security $security)
{
$this->unleash = $unleash;
$this->security = $security;
}
public function get(string $featureName): ?callable
{
$user = $this->security->getUser();
// Set context. Example: user identifier, IP, hostname, etc.
$context = new UnleashContext($user ? $user->getUsername() : null);
return function () use ($featureName, $context) {
return $this->unleash->isEnabled($featureName, $context);
};
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.