Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/adrenalinkin/config-helper
Extends Symfony Dependency Injection Component and provides store configurations in each bundles separately by common yaml-file
https://github.com/adrenalinkin/config-helper
dependency-injection helper symfony-component yaml-configuration
Last synced: about 1 month ago
JSON representation
Extends Symfony Dependency Injection Component and provides store configurations in each bundles separately by common yaml-file
- Host: GitHub
- URL: https://github.com/adrenalinkin/config-helper
- Owner: adrenalinkin
- License: mit
- Created: 2018-02-14T11:49:03.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2018-07-27T10:31:47.000Z (over 6 years ago)
- Last Synced: 2024-11-16T13:20:51.005Z (about 1 month ago)
- Topics: dependency-injection, helper, symfony-component, yaml-configuration
- Language: PHP
- Homepage:
- Size: 12.7 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.RU.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
Config Helper [![In English](https://img.shields.io/badge/Switch_To-English-green.svg?style=flat-square)](./README.md)
=============Введение
--------Компонент позволяет расширить стандартный класс `Symfony\Component\DependencyInjection\Extension\Extension` и получить
доступ к сбору конфигурации `YAML` среди всех зарегистрированных бандлов проекта.Установка
---------Откройте консоль и, перейдя в директорию проекта, выполните следующую команду для загрузки наиболее подходящей
стабильной версии этого компонента:
```bash
composer require adrenalinkin/config-helper
```
*Эта команда подразумевает что [Composer](https://getcomposer.org) установлен и доступен глобально.*Пример использования и сравнение со стандартными методами
---------------------------------------------------------Допустим что в нашем проекте существуют два бандла, хранящие бизнес-логику двух обособленных частей системы:
* `AcmeBundle` с сущностями `AcmeBundle:User` и `AcmeBundle:Position`
* `AcmePostBundle` с сущностью `AcmePostBundle:Post`Представьте что вам понадобилось добавить конфигурацию для каждой сущности. Допустим что конфигурация должна
определять роль пользователя, обладая которой, он получит доступ к специфичиским функциям.
Для создания конфигурации создан бандл `AcmeConfigBundle`. Конечная конфигурация в формате `YAML`
будет выглядеть следующим образом:```yaml
acme_config:
AcmeBundle:User: ROLE_USER_ADMIN # ключ - это имя класса сущности, а значение - роль
AcmeBundle:Position: ROLE_USER_ADMIN
AcmePostBundle:Post: ROLE_POST_ADMIN
```### Стандартные подходы
Конечно можно хранить конфигурацию в глобальном файле `app/config/config.yml`:
```yaml
# app/config/config.yml# конфигурация других бандлов
acme_config:
AcmeBundle:User: ROLE_USER_ADMIN
AcmeBundle:Position: ROLE_USER_ADMIN
AcmePostBundle:Post: ROLE_POST_ADMIN# конфигурация других бандлов
```Или поместить конфигурацию внутри бандла в свой собственный файл и затем загружать ее оттуда в `AcmeConfigExtension`
```yaml
#Acme/ConfigBundle/Resources/config/custom.yml
acme_config:
AcmeBundle:User: ROLE_USER_ADMIN
AcmeBundle:Position: ROLE_USER_ADMIN
AcmePostBundle:Post: ROLE_POST_ADMIN
```Однако оба эти способа хранения конфигурации, для нашей реализации, имеют один существенный недостаток - при появлении
новых бандлов нам придется каждый раз модифицировать глобальный файл конфигурации или файл конфигурации внутри бандла.
**В обоих случаях появляется жесткая связь бандлов и затрудняется сопровождение проекта.**### Использование компонента
Для устранения появления нежелательных связей в проекте необходимо:
* Определить название файла для храениения конфигурации, например `acme_config.yml`.
* Унаследовать `AcmeConfigExtension` от [AbstractExtension](./Extension/AbstractExtension.php):
```php
getConfigurationsFromFile('acme_config.yml', $container);
// обрабатываем полученную конфигурацию
$configs = $this->processConfiguration(new Configuration(), $configs);
// необходимые действия$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yml');
}
}
```
* Создать конфигурационные файлы в тех бандлах, где это необходимо:
```yaml
# Acme/AcmeBundle/Resources/config/acme_config.yml
acme_config:
AcmeBundle:User: ROLE_USER_ADMIN
AcmeBundle:Position: ROLE_USER_ADMIN
```
```yaml
# AcmePost/AcmePostBundle/Resources/config/acme_config.yml
acme_config:
AcmePostBundle:Post: ROLE_POST_ADMIN
```Данный подход позволяет вам создавать и удалять конфигурации в конкретных бандлах и при этом изменения не потребуются в
проекте глобально если вы удалите один из файлов или целый бандл (`AcmePostBundle` например).**Примечание**: По умолчанию метод `getConfigurationsFromFile($fileName, ContainerBuilder $container, $merge = true)`
использует стандартную функцию PHP [array_merge_recursive](http://php.net/manual/en/function.array-merge-recursive.php)
для объединения всех найденных конфигураций. Если вы хотите самостоятельно обработать полученный список конфигураций
передайте третьим параметром `false` и получите список всех зарегистрированных конфигураций.Лицензия
--------[![license](https://img.shields.io/badge/License-MIT-green.svg?style=flat-square)](./LICENSE)