als/config 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

als/config

Composer 安装命令:

composer require als/config

包简介

Config Manager Component.

关键字:

README 文档

README

Config Manager Component.

Designed to simplify access to configuration data within applications. The configuration data may come from a variety of formats supporting hierarchical data storage. Currently provides adapters that read configuration data stored in INI, JSON and XML files.

Пример использования

# Создаем объект класса 'Als/Config':
$config[^Als/Config::create[]]


# Читаем конфиги из файлов:
^config.read[/path/to/config_ini.ini]
^config.read[/path/to/config_xml.xml]
^config.read[/path/to/config_json.json]

# Тпереь нам доступны конфиги по ключам из названий файлов:
$ini[$config.config_ini]
$xml[$config.config_xml]
$json[$config.config_json]

# Так же при чтение файлов, мы можем указать ключ, по которому данные будут доступны:
^config.read[cache;/path/to/cache.ini]
#--> $config.cache

Параметры создания объекта

# При создании объекта класса 'Als/Config', мы можем указать папку с конфигами:
$config[^Als/Config::create[
	$.root[/path/to/configs]
]]

# Теперь при чтении конфигов, нам не надо указывать полный путь к файлу с конфигом:
^config.read[database.xml]


# Так, же при создании объекта класса 'Als/Config', мы можем указать список
# конфигов, которые будут автоматически загружены во время создания экземпляра класса:
#
# Аргумент $.configs[] передается в виде хеша, в котором:
#  'ключ'     - это ключ по которому будут доступны данные конфига в объекте класса
#  'значение' - путь к файлу с конфигурационными данными
$config[^Als/Config::create[
	$.configs[
		$.cache[cache.ini]
		$.database[database.xml]
	]
]]

Методы доступа к конфигурационным данным

# Создаем объект класса 'Als/Config':
$config[^Als/Config::create[]]

# Читам конфигурационные данные из файла 'database.json', со следующим содержимым:
#  {
#    "debug": true,
#    "cache": {
#       "path": "/path/to/database/cache"
#    }
#  }
^config.read[db;/path/to/database.json]

# Теперь мы можем получать конфигурационные данные, обращаясь к объекту '$config', как к хешу:
$debug($config.db.debug)

# Так же мы можем воспользоваться методом '^get[]' (для разделения вложенности используются точки):
$path[^config.get[db.cache.path]]

# Если вызвать метод '^get[]' без аргументов, то он вернёт хеш со всеми ранее загруженными конфигами:
$configs[^config.get[]]

Примеры конфигов

Формат .ini

; некоторый комментарий
# комментарий в стиле Unix

# Значения без секции
param1=value1 ; иногда допускается комментарий к отдельному параметру
param2=value2

[section]
; комментарий о разделе
param1=section.value1 # иногда допускается комментарий к отдельному параметру
param2=section.value2

[section.subsection]
param1=section.subsection.value1
param2=section.subsection.value2

; иногда позволяется перечислять несколько значений через запятую
[section.subsection2]
param1=section.subsection2.value1
param2=section.subsection2.value2

[section.subsection2.subsection3]
param1=section.subsection2.subsection3.value1
param2=section.subsection2.subsection3.value2

; Иногда значения отсутствуют
[section.subsection2.subsection4]

[section.subsection2.subsection5]
param1=
param2=

Формат .xml

<?xml version="1.0" encoding="UTF-8" ?>
<config>
    <param1>value1</param1>
    <param2>value2</param2>

    <section>
        <param1>section.value1</param1>
        <param2>section.value2</param2>

        <subsection>
            <param1>section.subsection.value1</param1>
            <param2>section.subsection.value2</param2>
        </subsection>

        <subsection2>
            <param1>section.subsection2.value1</param1>
            <param2>section.subsection2.value2</param2>

            <subsection3>
                <param1>section.subsection2.subsection3.value1</param1>
                <param2>section.subsection2.subsection3.value2</param2>
            </subsection3>

            <subsection4></subsection4>

            <subsection5>
                <param1></param1>
                <param2></param2>
            </subsection5>
        </subsection2>
    </section>
</config>

Формат .json

{
  "param1": "value1",
  "param2": "value2",

  "section": {
    "param1": "section.value1",
    "param2": "section.value2",

    "subsection": {
      "param1": "section.subsection.value1",
      "param2": "section.subsection.value2"
    },

    "subsection2": {
      "param1": "section.subsection2.value1",
      "param2": "section.subsection2.value2",

      "subsection3": {
        "param1": "section.subsection2.subsection3.value1",
        "param2": "section.subsection2.subsection3.value2"
      },

      "subsection4": {},

      "subsection5": {
        "param1": "",
        "param2": ""
      }
    }
  }
}

TODO

  • Написать метод "@parse[]", что бы можно было нетолько загружать данные из файлов.
  • Написать метод "@save[]", что бы можно было сохранять конфиги.
  • Парсинг аттрибутов в XML, сейчас конфиги формата '.xml' парсятся без учете аттрибутов.

References

als/config 适用场景与选型建议

als/config 是一款 基于 OpenEdge ABL 开发的 Composer 扩展包,目前已累计 127 次下载、GitHub Stars 达 0, 最近一次更新时间为 2021 年 02 月 24 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「config」 「als」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 als/config 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 als/config 我们能提供哪些服务?
定制开发 / 二次开发

基于 als/config 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 127
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: OpenEdge ABL

其他信息

  • 授权协议: MIT
  • 更新时间: 2021-02-24