opensoft / rollout-bundle
opensoft/rollout 的 Symfony2/3/4 Bundle
2.2.0
2019-05-31 16:23 UTC
Requires
- php: >=5.3
- opensoft/rollout: ~2.1
- symfony/framework-bundle: ~2.1|^3.0|^4.0
Requires (Dev)
- phpunit/phpunit: >=4.0,<6.0
Suggests
- liip/doctrine-cache-bundle: For use with the DoctrineCacheStorageAdapter
README
一个为 opensoft/rollout 定制的 Symfony3 Bundle
必选截图
安装
1) 通过 composer 安装
使用 composer 添加 bundle
composer require opensoft/rollout-bundle
并在你的 app/AppKernel.php
中激活它
new Opensoft\RolloutBundle\OpensoftRolloutBundle(),
2) 配置
将以下内容添加到你的配置文件中(支持自动装配)
opensoft_rollout: user_provider_service: [YOUR USER PROVIDER SERVICE] storage_service: [YOUR STORAGE SERVICE FOR ROLLOUT]
user_provider_service
: 添加 UserProvider 的服务 id(通常是带有自动装配的 FQDN)storage_service
: 默认为Opensoft\Rollout\Storage\ArrayStorage
,但你也可以使用包含的Opensoft\RolloutBundle\Storage\Doctrine\DoctrineORMStorage
或创建自己的(见下文实现)
3) 实现接口
RolloutUserInterface
任何滚动用户 必须 实现 RolloutUserInterface。这通常是你的应用程序中的主要用户对象。
<?php use Opensoft/Rollout/RolloutUserInterface; class User implements RolloutUserInterface { /** * @return string */ public function getRolloutIdentifier() { return $this->email; } }
UserProviderInterface
通过实现 UserProviderInterface 将单个用户暴露给滚动接口
<?php use Doctrine\ORM\EntityRepository; use Opensoft\RolloutBundle\Rollout\UserProviderInterface; class UserRepository extends EntityRepository implements UserProviderInterface { /** * @param mixed $id * @return RolloutUserInterface|null */ public function findByRolloutIdentifier($id) { return $this->findOneBy(array('email' => $id)); } }
GroupDefinitionInterface
为你的滚动提供不同的用户组。
使用 DIC 标签 rollout.group
标记所有你的组定义,以便将它们暴露给滚动接口
<?php use Opensoft\RolloutBundle\Rollout\GroupDefinitionInterface; class AcmeEmployeeGroupDefinition implements GroupDefinitionInterface { /** * @return string */ public function getName() { return 'acme_employee'; } /** * @return string */ public function getDescription() { return 'This group contains acme company employees'; } /** * @return \Closure */ public function getCallback() { return function(RolloutUserInterface $user) { // Is this user an employee of acme? return strpos($user->getEmail(), 'acme.com') !== false; }; } }
StorageInterface
实现自定义存储解决方案。
注意: rollout 的 StorageInterface 在版本 2.0.0
中已更改。
<?php use Opensoft\Rollout\Storage\StorageInterface; class MyStorage implements StorageInterface { /** * @param string $key * @return mixed|null Null if the value is not found */ public function get($key) { // implement get } /** * @param string $key * @param mixed $value */ public function set($key, $value) { // implement set } /** * @param string $key * @since 2.0.0 */ public function remove($key) { // implement remove } }
4) 激活路由
将以下内容添加到你的 app/Resources/config/routing.yml
文件中
opensoft_rollout:
resource: "@OpensoftRolloutBundle/Resources/config/routing.yml"
prefix: /admin/rollout
使用方法
在控制器中检查功能是否启用
if ($this->get('rollout')->isActive('chat', $this->getUser())) { // do some chat related feature work }
Twig 示例
{% if rollout_is_active('chat', app.user) %}
<!-- show a chat interface -->
{% endif %}