|
Config |Config Manager.
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':
$config[^als/config/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', ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠ°Π·Π°ΡΡ ΠΏΠ°ΠΏΠΊΡ Ρ ΠΊΠΎΠ½ΡΠΈΠ³Π°ΠΌΠΈ:
$config[^als/config/Config::create[
$.root[/path/to/configs]
]]
# Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠΈ ΡΡΠ΅Π½ΠΈΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΠΎΠ², Π½Π°ΠΌ Π½Π΅ Π½Π°Π΄ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΠΎΠΌ:
^config.read[database.xml]
# Π’Π°ΠΊ, ΠΆΠ΅ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠ»Π°ΡΡΠ° 'als/config/Config', ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠ°Π·Π°ΡΡ ΡΠΏΠΈΡΠΎΠΊ
# ΠΊΠΎΠ½ΡΠΈΠ³ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°Π³ΡΡΠΆΠ΅Π½Ρ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΊΠ»Π°ΡΡΠ°:
#
# ΠΡΠ³ΡΠΌΠ΅Π½Ρ $.configs[] ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅ Ρ
Π΅ΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ:
# 'ΠΊΠ»ΡΡ' - ΡΡΠΎ ΠΊΠ»ΡΡ ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π±ΡΠ΄ΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³Π° Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ ΠΊΠ»Π°ΡΡΠ°
# 'Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅' - ΠΏΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ
$config[^als/config/Config::create[
$.configs[
$.cache[cache.ini]
$.database[database.xml]
]
]]
ΠΠ΅ΡΠΎΠ΄Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΌ Π΄Π°Π½Π½ΡΠΌ
# Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° 'als/config/Config':
$config[^als/config/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
- Questions to Leonid Knyazev | leonid@knyazev.me | n3o@design.ru
- Bug reports and Feature requests to Issues