/** * @param FilesystemInterface $fs * @param string[] $masks * @param ParserInterface[] $parsers * @param bool $recursive */ public function __construct(FilesystemInterface $fs, $masks = [], $parsers = [], $recursive = false) { parent::__construct(); $factory = $this; $factory->bindParam('fs', $fs); $factory->bindParam('masks', $masks); $factory->bindParam('parsers', $parsers); $factory->bindParam('recursive', $recursive); $factory->define(function (callable $overwriteHandler = null) { $fs = $this->getParam('fs'); $masks = $this->getParam('masks'); $parsers = $this->getParam('parsers'); $recursive = $this->getParam('recursive'); $filters = $masks; $filters[] = '#(' . $this->getPatternForExt() . ')$#si'; $files = $fs->getFiles('', $recursive, $filters); $data = []; $config = new Config($data, $overwriteHandler); foreach ($files as $file) { $ext = $file['extension']; $data = []; if ($ext === 'php') { $data = $fs->req($file['path']); } else { if (isset($parsers[$ext])) { $contents = $fs->read($file['path']); $data = $parsers[$ext]->decode($contents); } } $config->merge($data); } return $config; }); }
/** * */ public function __destruct() { unset($this->defaults); parent::__destruct(); }