/** * ConfigObject is an object representing config data in an OO way * * @param array|ArrayObject|AbstractDriver $resource Config resource * * @param bool $cache Store ConfigObject to cache or not * * @throws ConfigException */ public function __construct($resource = [], $cache = true) { $driverAbstractClassName = '\\Webiny\\Component\\Config\\Drivers\\AbstractDriver'; $arrayObjectClassName = '\\Webiny\\Component\\StdLib\\StdObject\\ArrayObject\\ArrayObject'; // Validate given resources if (!$this->isArray($resource) && !$this->isInstanceOf($resource, $driverAbstractClassName) && !$this->isArrayObject($resource)) { throw new ConfigException("ConfigObject resource must be a valid array, {$arrayObjectClassName} or {$driverAbstractClassName}"); } if ($this->isInstanceOf($resource, $driverAbstractClassName)) { $originalResource = $resource->getResource(); // Store driver class name $this->driverClass = get_class($resource); // Get driver to parse resource and return data array $resource = $resource->getArray(); } else { $originalResource = $resource; } $this->resourceType = $this->determineResourceType($originalResource); // Build internal data array from array resource $this->buildInternalData($resource); // Store config to cache if ($cache) { $this->cacheKey = ConfigCache::createCacheKey($originalResource); ConfigCache::setCache($this->cacheKey, $this); } }