Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/qandidate-labs/qandidate-toggle-bundle
Symfony Bundle for Qandidate\Toggle
https://github.com/qandidate-labs/qandidate-toggle-bundle
Last synced: 6 days ago
JSON representation
Symfony Bundle for Qandidate\Toggle
- Host: GitHub
- URL: https://github.com/qandidate-labs/qandidate-toggle-bundle
- Owner: qandidate-labs
- License: mit
- Created: 2014-09-04T09:53:10.000Z (about 10 years ago)
- Default Branch: master
- Last Pushed: 2023-09-11T07:55:11.000Z (about 1 year ago)
- Last Synced: 2024-07-27T22:40:40.046Z (4 months ago)
- Language: PHP
- Size: 124 KB
- Stars: 89
- Watchers: 8
- Forks: 27
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# Qandidate Toggle Symfony Bundle
This Bundle provides the integration with [our toggle library]. It provides the
services and configuration you need to implement feature toggles in your
application.![build status](https://github.com/qandidate-labs/qandidate-toggle-bundle/actions/workflows/ci.yml/badge.svg)
[our toggle library]: https://github.com/qandidate-labs/qandidate-toggle
## About
Read the our blog post series about this repository at:
- http://labs.qandidate.com/blog/2014/08/18/a-new-feature-toggling-library-for-php/
- http://labs.qandidate.com/blog/2014/08/19/open-sourcing-our-feature-toggle-api-and-ui/## Installation
### Using Symfony Flex
The easiest way to install and configure the QandidateToggleBundle with Symfony is by using
[Symfony Flex](https://github.com/symfony/flex).Make sure you have Symfony Flex installed:
```
$ composer require symfony/flex ^1.0
$ composer config extra.symfony.allow-contrib true
```Install the bundle:
```
$ composer require qandidate/toggle-bundle ^1.0
```Symfony Flex will automatically register and configure the bundle.
### Manually
Add the bundle to your composer.json
```bash
$ composer require qandidate/toggle-bundle ^1.0
```Add the bundle to your Kernel:
```php
$bundles = array(
// ..
new Symfony\Bundle\SecurityBundle\SecurityBundle(),
new Symfony\Bundle\TwigBundle\TwigBundle(),
new Qandidate\Bundle\ToggleBundle\QandidateToggleBundle(),
);
```## Configuration
```yaml
qandidate_toggle:
persistence: in_memory|redis|factory|config
context_factory: null|your.context_factory.service.id
redis_namespace: toggle_%kernel.environment% # default, only required when persistence = redis
redis_client: null|your.redis_client.service.id # only required when persistence = redis
collection_factory: # only required when persistence = factory
service_id: your.collection_factory.service.id
method: create
```## Sample Configuration for Symfony
```yaml
qandidate_toggle:
persistence: config
toggles:
always-active-feature:
name: always-active-feature
status: always-active
inactive-feature:
name: inactive-feature
status: inactive
conditions:
conditionally-active:
name: conditionally-active
status: conditionally-active
conditions:
- name: operator-condition
key: user_id
operator:
name: greater-than
value: 42
```## Example usage
Usage can vary on your application. This example uses the supplied
`UserContextFactory`, but you probably need to create your own factory.```xml
```
```php
// Acme\Controllerpublic function __construct(
/* ArticleRepository, Templating, ..*/
ToggleManager $manager,
ContextFactory $contextFactory
) {
// ..
$this->manager = $manager;
$this->context = $contextFactory->createContext();
}// ..
public function articleAction(Request $request)
{
$this->article = $this->repository->findBySlug($request->request->get('slug'));return $this->templating->render('article.html.twig', array(
'article' => $article,
'enableComments' => $this->manager->active('comments', $this->context),
));
}
```You can find a working example using the Symfony [MicroKernelTrait](https://symfony.com/doc/current/configuration/micro_kernel_trait.html)
in the [Resources/doc/example](https://github.com/qandidate-labs/qandidate-toggle-bundle/tree/master/Resources/doc/example) directory.## Annotation Usage
You can also use the `@Toggle` annotation on a controller. When the toggle isn't active a 404 exception is thrown.
```php
use Qandidate\Bundle\ToggleBundle\Annotations\Toggle;/**
* @Toggle("cool-feature")
*/
class FooController
{/**
* @Toggle("another-cool-feature")
*/
public function barAction()
{
}public function bazAction()
{
}
}
```## Twig usage
If you use Twig you can also use the function:
```jinja
{% if feature_is_active('comments') %}
{# Awesome comments #}
{% endif %}
```
Or the Twig test:```jinja
{% if 'comments' is active feature %}
{# Awesome comments #}
{% endif %}
```Both are registered in the [ToggleTwigExtension](Twig/ToggleTwigExtension.php).
## Data collector
With the data collector you have a overview about all toggles. In the toolbar you see all conditions and the current status.
In the panel you have two lists:
* You can see all keys and there current values.
* Then you can see all configured toggles, there conditions and if they are active.## Testing
To run PHPUnit tests:
```bash
$ ./vendor/bin/phpunit
```## License
MIT, see LICENSE.