/**
* 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);
}
}