docs/config.md

Summary

Maintainability
Test Coverage
:::{php:namespace} Atk4\Core
:::

# Config Trait

:::{php:trait} ConfigTrait
:::

Agile Core implements support for read configuration files of different formats

## Introduction

This trait can be added to any object to load a configuration.
Configuration files can be of 4 types: php, php-inline, json, yaml.

Loading can be done in this way:

```
$object = new Object();
$object->readConfig('config.php', 'php');
```

After loading, configuration elements can be retrieved in this way:

```
$object->getConfig('element_key', 'if not defined use this as default');
```

if you need an element that is declared inside an array you can use a special syntax:

```
$object->getConfig('level1_array/level2_array/element_key', 'if not defined use this as default');
```

Element in config can be defined even manually:

```
$object->setConfig('element_key', $element);
```

## Supported Formats

### php

Configuration is defined as a return statement

```
return [
    'var A' => new UserClass(),
    'var B' => 2,
    'var C' => [
        '2nd-level' => 'var D',
    ],
];
```

### JSON

Configuration is defined as json

### YAML

Configuration is defined as yaml

## Methods

:::{php:method} readConfig($files = ['config.php'], $format = 'php')
Read config file or files and store it in $config property
:::

:::{php:method} setConfig($paths = [], $value = null)
Manually set configuration option
:::

:::{php:method} getConfig($path, $defaultValue = null)
Get configuration element
:::