get('ini.General.maintenance_mode'); */ class IniConfigDefinitionSource implements DefinitionSource { /** * @var GlobalSettingsProvider */ private $config; /** * @var string */ private $prefix; /** * @param GlobalSettingsProvider $config * @param string $prefix Prefix for the container entries. */ public function __construct(GlobalSettingsProvider $config, $prefix = 'ini.') { $this->config = $config; $this->prefix = $prefix; } /** * {@inheritdoc} */ public function getDefinition($name) { if (strpos($name, $this->prefix) !== 0) { return null; } list($sectionName, $configKey) = $this->parseEntryName($name); $section = $this->getSection($sectionName); if ($configKey === null) { return new ValueDefinition($name, $section); } if (! array_key_exists($configKey, $section)) { return null; } return new ValueDefinition($name, $section[$configKey]); } private function parseEntryName($name) { $parts = explode('.', $name, 3); array_shift($parts); if (! isset($parts[1])) { $parts[1] = null; } return $parts; } private function getSection($sectionName) { $section = $this->config->getSection($sectionName); if (!is_array($section)) { throw new DefinitionException(sprintf( 'IniFileChain did not return an array for the config section %s', $section )); } return $section; } }