brightnucleus /
config
| 1 | <?php |
||||
| 2 | /** |
||||
| 3 | * Bright Nucleus Config Component. |
||||
| 4 | * |
||||
| 5 | * @package BrightNucleus\Config |
||||
| 6 | * @author Alain Schlesser <[email protected]> |
||||
| 7 | * @license MIT |
||||
| 8 | * @link http://www.brightnucleus.com/ |
||||
| 9 | * @copyright 2016-2017 Alain Schlesser, Bright Nucleus |
||||
| 10 | */ |
||||
| 11 | |||||
| 12 | namespace BrightNucleus\Config; |
||||
| 13 | |||||
| 14 | use BrightNucleus\Config\Exception\FailedToProcessConfigException; |
||||
| 15 | use Exception; |
||||
| 16 | |||||
| 17 | /** |
||||
| 18 | * Basic config processing that can be included within classes. |
||||
| 19 | * |
||||
| 20 | * @since 0.1.2 |
||||
| 21 | * |
||||
| 22 | * @package BrightNucleus\Config |
||||
| 23 | * @author Alain Schlesser <[email protected]> |
||||
| 24 | */ |
||||
| 25 | trait ConfigTrait |
||||
| 26 | { |
||||
| 27 | |||||
| 28 | /** |
||||
| 29 | * Reference to the Config object. |
||||
| 30 | * |
||||
| 31 | * @since 0.1.2 |
||||
| 32 | * |
||||
| 33 | * @var ConfigInterface |
||||
| 34 | */ |
||||
| 35 | protected $config; |
||||
| 36 | |||||
| 37 | /** |
||||
| 38 | * Process the passed-in configuration file. |
||||
| 39 | * |
||||
| 40 | * @since 0.1.2 |
||||
| 41 | * |
||||
| 42 | * @param ConfigInterface $config The Config to process. |
||||
| 43 | * @param string ... List of keys. |
||||
| 44 | * |
||||
| 45 | * @throws FailedToProcessConfigException If the arguments could not be parsed into a Config. |
||||
| 46 | */ |
||||
| 47 | 4 | protected function processConfig(ConfigInterface $config) |
|||
| 48 | { |
||||
| 49 | 4 | if (func_num_args() > 1) { |
|||
| 50 | try { |
||||
| 51 | 2 | $keys = func_get_args(); |
|||
| 52 | 2 | array_shift($keys); |
|||
| 53 | 2 | $config = $config->getSubConfig($keys); |
|||
| 54 | 1 | } catch (Exception $exception) { |
|||
| 55 | 1 | throw new FailedToProcessConfigException( |
|||
| 56 | sprintf( |
||||
| 57 | 1 | _('Could not process the config with the arguments "%1$s".'), |
|||
| 58 | 1 | print_r(func_get_args(), true) |
|||
|
0 ignored issues
–
show
Bug
introduced
by
Loading history...
|
|||||
| 59 | ) |
||||
| 60 | ); |
||||
| 61 | } |
||||
| 62 | } |
||||
| 63 | 3 | $this->config = $config; |
|||
| 64 | 3 | } |
|||
| 65 | |||||
| 66 | /** |
||||
| 67 | * Check whether the Config has a specific key. |
||||
| 68 | * |
||||
| 69 | * To get a value several levels deep, add the keys for each level as a comma-separated list. |
||||
| 70 | * |
||||
| 71 | * @since 0.1.2 |
||||
| 72 | * @since 0.1.5 Accepts list of keys. |
||||
| 73 | * |
||||
| 74 | * @param string|array $_ List of keys. |
||||
| 75 | * |
||||
| 76 | * @return bool Whether the key is known. |
||||
| 77 | */ |
||||
| 78 | 2 | protected function hasConfigKey($_) |
|||
| 79 | { |
||||
| 80 | 2 | $keys = func_get_args(); |
|||
| 81 | |||||
| 82 | 2 | return $this->config->hasKey($keys); |
|||
|
0 ignored issues
–
show
$keys of type array is incompatible with the type string expected by parameter $_ of BrightNucleus\Config\ConfigInterface::hasKey().
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||
| 83 | } |
||||
| 84 | |||||
| 85 | /** |
||||
| 86 | * Get the Config value for a specific key. |
||||
| 87 | * |
||||
| 88 | * To get a value several levels deep, add the keys for each level as a comma-separated list. |
||||
| 89 | * |
||||
| 90 | * @since 0.1.2 |
||||
| 91 | * @since 0.1.5 Accepts list of keys. |
||||
| 92 | * |
||||
| 93 | * @param string|array $_ List of keys. |
||||
| 94 | * |
||||
| 95 | * @return mixed Value of the key. |
||||
| 96 | */ |
||||
| 97 | 2 | protected function getConfigKey($_) |
|||
| 98 | { |
||||
| 99 | 2 | $keys = func_get_args(); |
|||
| 100 | |||||
| 101 | 2 | return $this->config->getKey($keys); |
|||
|
0 ignored issues
–
show
$keys of type array is incompatible with the type string expected by parameter $_ of BrightNucleus\Config\ConfigInterface::getKey().
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||
| 102 | } |
||||
| 103 | |||||
| 104 | /** |
||||
| 105 | * Get the callable Config value for a specific key. |
||||
| 106 | * |
||||
| 107 | * If the fetched value is indeed a callable, it will be executed with the provided arguments, and the resultant |
||||
| 108 | * value will be returned instead. |
||||
| 109 | * |
||||
| 110 | * @since 0.4.8 |
||||
| 111 | * |
||||
| 112 | * @param string|array $key Key or array of nested keys. |
||||
| 113 | * @param array $args Optional. Array of arguments to pass to the callable. |
||||
| 114 | * |
||||
| 115 | * @return mixed Resultant value of the key's callable. |
||||
| 116 | */ |
||||
| 117 | 1 | protected function getConfigCallable($key, array $args = []) |
|||
| 118 | { |
||||
| 119 | 1 | $value = $this->config->getKey($key); |
|||
|
0 ignored issues
–
show
It seems like
$key can also be of type array; however, parameter $_ of BrightNucleus\Config\ConfigInterface::getKey() does only seem to accept string, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||
| 120 | |||||
| 121 | 1 | if (is_callable($value)) { |
|||
| 122 | 1 | $value = $value(...$args); |
|||
| 123 | } |
||||
| 124 | |||||
| 125 | 1 | return $value; |
|||
| 126 | } |
||||
| 127 | |||||
| 128 | /** |
||||
| 129 | * Get a (multi-dimensional) array of all the configuration settings. |
||||
| 130 | * |
||||
| 131 | * @since 0.1.4 |
||||
| 132 | * |
||||
| 133 | * @return array All the configuration settings. |
||||
| 134 | */ |
||||
| 135 | 1 | protected function getConfigArray() |
|||
| 136 | { |
||||
| 137 | 1 | return $this->config->getAll(); |
|||
| 138 | } |
||||
| 139 | |||||
| 140 | /** |
||||
| 141 | * Get an array of all the keys that are known by the Config. |
||||
| 142 | * |
||||
| 143 | * @since 0.1.2 |
||||
| 144 | * |
||||
| 145 | * @return array Array of strings containing all the keys. |
||||
| 146 | */ |
||||
| 147 | 1 | protected function getConfigKeys() |
|||
| 148 | { |
||||
| 149 | 1 | return $this->config->getKeys(); |
|||
| 150 | } |
||||
| 151 | |||||
| 152 | /** |
||||
| 153 | * Get a default configuration in case none was injected into the constructor. |
||||
| 154 | * |
||||
| 155 | * The name and path of the configuration needs to be set as a const called DEFAULT_CONFIG within the class |
||||
| 156 | * containing the trait. The path needs to be relative to the location of the containing class file. |
||||
| 157 | * |
||||
| 158 | * @since 0.4.2 |
||||
| 159 | * |
||||
| 160 | * @return ConfigInterface Configuration settings to use. |
||||
| 161 | */ |
||||
| 162 | 1 | protected function fetchDefaultConfig() |
|||
| 163 | { |
||||
| 164 | 1 | $configFile = method_exists($this, 'getDefaultConfigFile') |
|||
| 165 | 1 | ? $this->getDefaultConfigFile() |
|||
| 166 | 1 | : __DIR__ . '/../config/defaults.php'; |
|||
| 167 | |||||
| 168 | 1 | return $this->fetchConfig($configFile); |
|||
| 169 | } |
||||
| 170 | |||||
| 171 | /** |
||||
| 172 | * Get a configuration from a specified $file. |
||||
| 173 | * |
||||
| 174 | * If file is not accessible or readable, returns an empty Config. |
||||
| 175 | * |
||||
| 176 | * @since 0.4.2 |
||||
| 177 | * |
||||
| 178 | * @return ConfigInterface Configuration settings to use. |
||||
| 179 | */ |
||||
| 180 | 2 | protected function fetchConfig($configFile) |
|||
| 181 | { |
||||
| 182 | 2 | if (is_string($configFile) && ! is_readable($configFile)) { |
|||
| 183 | 1 | $configFile = []; |
|||
| 184 | } |
||||
| 185 | |||||
| 186 | 2 | return ConfigFactory::create($configFile); |
|||
| 187 | } |
||||
| 188 | } |
||||
| 189 |