j4nr6n / feature-flag-bundle
功能标志
0.0.1
2024-03-21 03:25 UTC
Requires
- php: >=8.3
- symfony/config: ^7.0
- symfony/dependency-injection: ^7.0
- symfony/http-kernel: ^7.0
Requires (Dev)
- phpunit/phpunit: ^9.5
- roave/security-advisories: dev-latest
- squizlabs/php_codesniffer: ^3.9.0
- twig/twig: ^v3.8.0
- vimeo/psalm: ^5.22.2
README
安装
请确保已全局安装 Composer,如 Composer 文档中的安装章节所述。
打开命令控制台,进入您的项目目录并执行
$ composer require j4nr6n/feature-flag-bundle
不使用 Symfony Flex 的应用程序
通过将其添加到项目中 config/bundles.php
文件中注册的包列表中启用该包
// config/bundles.php return [ // ... j4nr6n\FeatureFlagBundle\FeatureFlagBundle::class => ['all' => true], ];
使用该包
投票者是一种隔离特定功能代码的简单方法,但也可以用于对多个功能进行“投票”。
// src/FeatureFlag/MyFeatureVoter.php // ... use j4nr6n\FeatureFlagBundle\FeatureVoterInterface; class MyFeatureVoter implements FeatureVoterInterface { public function supports(string $featureFlag): bool { return $featureFlag === 'my_new_feature'; } public function isEnabled(string $featureFlag, array $context = []): bool { // ... } }
您可以创建任意数量的功能投票者。但请记住,如果任何单个注册的投票者返回 true
,最终结果将是 true
。
在控制器中
// src/Controller/DefaultController.php // ... use j4nr6n\FeatureFlagBundle\FeatureCheckerInterface; class DefaultController extends AbstractController { // ... #[Route(name: 'app_default_homepage', methods: [Request::METHOD_GET])] public function homepage(FeatureCheckerInterface $featureChecker): Response { return $featureChecker->isEnabled('new_homepage', ['user' => $this->getUser()]) ? $this->render('default/new_homepage.html.twig') : $this->render('default/homepage.html.twig'); } }
在服务中
// src/Service/SomeService.php // ... use j4nr6n/FeatureFlagBundle\FEatureCheckerInterface; class SomeService { public function __construct( private readonly FeatureCheckerInterface $featureChecker ) { } public function someMethod() { return $this->featureChecker->isEnabled('new_feature') ? // Let them experience our greatness! : // Not yet... } }
在 Twig 中
{% include feature_is_enabled('fancy_widget') ? '_fancy_widget.html.twig' : '_plain_widget.html.twig' %}
功能检查器
如果功能投票者不起作用,您还可以创建自己的功能“检查器”。有关更多信息,请参阅Feature Checker
文档。