opensoft/rollout-bundle
Composer 安装命令:
composer require opensoft/rollout-bundle
包简介
A Symfony2/3/4 Bundle for opensoft/rollout
README 文档
README
A Symfony3 Bundle for opensoft/rollout
Obligatory Screenshot
Installation
1) Install via composer
Add the bundle via composer
composer require opensoft/rollout-bundle
And activate it inside your app\AppKernel.php
new Opensoft\RolloutBundle\OpensoftRolloutBundle(),
2) Configuration
Add the following to your configuration (supports auto-wiring)
opensoft_rollout: user_provider_service: [YOUR USER PROVIDER SERVICE] storage_service: [YOUR STORAGE SERVICE FOR ROLLOUT]
user_provider_service: Add the service id (generally the FQDN with auto-wiring) of the UserProvider to which you added the RolloutUserProviderInterfacestorage_service: Defaults toOpensoft\Rollout\Storage\ArrayStorage, but you can also use the includedOpensoft\RolloutBundle\Storage\Doctrine\DoctrineORMStorageor create your own (see below for implementation)
3) Implement Interfaces
RolloutUserInterface
Any rollout user must implement the RolloutUserInterface. Often, this will be your main user object in the application.
<?php use Opensoft/Rollout/RolloutUserInterface; class User implements RolloutUserInterface { /** * @return string */ public function getRolloutIdentifier() { return $this->email; } }
UserProviderInterface
Expose individual users to the rollout interface by implementing the 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
Provide different groups of users to your rollout.
Tag all of your group definitions with the DIC tag rollout.group to expose them to the rollout interface
<?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
Implement a custom storage solution.
Note: The rollout StorageInterface changed in version 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) Activate Routing
Add the following to your app/Resources/config/routing.yml file:
opensoft_rollout:
resource: "@OpensoftRolloutBundle/Resources/config/routing.yml"
prefix: /admin/rollout
Usage
Check if a feature is enabled in a controller
if ($this->get('rollout')->isActive('chat', $this->getUser())) { // do some chat related feature work }
Twig example:
{% if rollout_is_active('chat', app.user) %}
<!-- show a chat interface -->
{% endif %}
Further Reading
opensoft/rollout-bundle 适用场景与选型建议
opensoft/rollout-bundle 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 122.41k 次下载、GitHub Stars 达 42, 最近一次更新时间为 2014 年 04 月 04 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 opensoft/rollout-bundle 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 opensoft/rollout-bundle 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 122.41k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 43
- 点击次数: 8
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2014-04-04
