Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. Config.php

class Config

Same name in this branch
  1. 11.1.x vendor/composer/composer/src/Composer/Config.php \Composer\Config
  2. 11.1.x vendor/squizlabs/php_codesniffer/src/Config.php \PHP_CodeSniffer\Config
  3. 11.1.x composer/Plugin/VendorHardening/Config.php \Drupal\Composer\Plugin\VendorHardening\Config
  4. 11.1.x core/modules/migrate_drupal/src/Plugin/migrate/source/d8/Config.php \Drupal\migrate_drupal\Plugin\migrate\source\d8\Config
  5. 11.1.x core/modules/migrate/src/Plugin/migrate/destination/Config.php \Drupal\migrate\Plugin\migrate\destination\Config

Defines the default configuration object.

Encapsulates all capabilities needed for configuration handling for a specific configuration object, including support for runtime overrides. The overrides are handled on top of the stored configuration so they are not saved back to storage.

Hierarchy

  • class \Drupal\Core\Config\ConfigBase implements \Drupal\Core\Cache\RefinableCacheableDependencyInterface uses \Drupal\Core\DependencyInjection\DependencySerializationTrait, \Drupal\Core\Cache\RefinableCacheableDependencyTrait
    • class \Drupal\Core\Config\StorableConfigBase extends \Drupal\Core\Config\ConfigBase
      • class \Drupal\Core\Config\Config extends \Drupal\Core\Config\StorableConfigBase

Expanded class hierarchy of Config

Related topics

Configuration API
Information about the Configuration API.
17 files declare their use of Config
BlockTheme.php in core/modules/block/src/Plugin/migrate/process/BlockTheme.php
CheckpointStorage.php in core/lib/Drupal/Core/Config/Checkpoint/CheckpointStorage.php
ConfigEntityStorage.php in core/lib/Drupal/Core/Config/Entity/ConfigEntityStorage.php
ConfigFormBase.php in core/lib/Drupal/Core/Form/ConfigFormBase.php
ConfigImportSubscriber.php in core/lib/Drupal/Core/EventSubscriber/ConfigImportSubscriber.php

... See full list

100 string references to 'Config'
action_settings.yml in core/modules/system/migrations/action_settings.yml
core/modules/system/migrations/action_settings.yml
Application::doRun in vendor/composer/composer/src/Composer/Console/Application.php
Runs the current application.
Bitbucket::authorizeOAuth in vendor/composer/composer/src/Composer/Util/Bitbucket.php
Attempts to authorize a Bitbucket domain via OAuth
BootstrapConfigStorageFactory::getDatabaseStorage in core/lib/Drupal/Core/Config/BootstrapConfigStorageFactory.php
Returns a Database configuration storage implementation.
ChangeUserRoleBase::calculateDependencies in core/modules/user/src/Plugin/Action/ChangeUserRoleBase.php
Calculates dependencies for the configured plugin.

... See full list

File

core/lib/Drupal/Core/Config/Config.php, line 19

Namespace

Drupal\Core\Config
View source
class Config extends StorableConfigBase {
    
    /**
     * An event dispatcher instance to use for configuration events.
     *
     * @var \Symfony\Contracts\EventDispatcher\EventDispatcherInterface
     */
    protected $eventDispatcher;
    
    /**
     * The current runtime data.
     *
     * The configuration data from storage merged with module and settings
     * overrides.
     *
     * @var array
     */
    protected $overriddenData;
    
    /**
     * The current module overrides.
     *
     * @var array
     */
    protected $moduleOverrides;
    
    /**
     * The current settings overrides.
     *
     * @var array
     */
    protected $settingsOverrides;
    
    /**
     * Constructs a configuration object.
     *
     * @param string $name
     *   The name of the configuration object being constructed.
     * @param \Drupal\Core\Config\StorageInterface $storage
     *   A storage object to use for reading and writing the
     *   configuration data.
     * @param \Symfony\Contracts\EventDispatcher\EventDispatcherInterface $event_dispatcher
     *   An event dispatcher instance to use for configuration events.
     * @param \Drupal\Core\Config\TypedConfigManagerInterface $typed_config
     *   The typed configuration manager service.
     */
    public function __construct($name, StorageInterface $storage, EventDispatcherInterface $event_dispatcher, TypedConfigManagerInterface $typed_config) {
        $this->name = $name;
        $this->storage = $storage;
        $this->eventDispatcher = $event_dispatcher;
        $this->typedConfigManager = $typed_config;
    }
    
    /**
     * {@inheritdoc}
     */
    public function initWithData(array $data) {
        parent::initWithData($data);
        $this->resetOverriddenData();
        return $this;
    }
    
    /**
     * {@inheritdoc}
     */
    public function get($key = '') {
        if (!isset($this->overriddenData)) {
            $this->setOverriddenData();
        }
        if (empty($key)) {
            return $this->overriddenData;
        }
        else {
            $parts = explode('.', $key);
            if (count($parts) == 1) {
                return $this->overriddenData[$key] ?? NULL;
            }
            else {
                $value = NestedArray::getValue($this->overriddenData, $parts, $key_exists);
                return $key_exists ? $value : NULL;
            }
        }
    }
    
    /**
     * {@inheritdoc}
     */
    public function setData(array $data) {
        parent::setData($data);
        $this->resetOverriddenData();
        return $this;
    }
    
    /**
     * Sets settings.php overrides for this configuration object.
     *
     * The overridden data only applies to this configuration object.
     *
     * @param array $data
     *   The overridden values of the configuration data.
     *
     * @return $this
     *   The configuration object.
     */
    public function setSettingsOverride(array $data) {
        $this->settingsOverrides = $data;
        $this->resetOverriddenData();
        return $this;
    }
    
    /**
     * Sets module overrides for this configuration object.
     *
     * @param array $data
     *   The overridden values of the configuration data.
     *
     * @return $this
     *   The configuration object.
     */
    public function setModuleOverride(array $data) {
        $this->moduleOverrides = $data;
        $this->resetOverriddenData();
        return $this;
    }
    
    /**
     * Sets the current data for this configuration object.
     *
     * Configuration overrides operate at two distinct layers: modules and
     * settings.php. Overrides in settings.php take precedence over values
     * provided by modules. Precedence or different module overrides is
     * determined by the priority of the config.factory.override tagged services.
     *
     * @return $this
     *   The configuration object.
     */
    protected function setOverriddenData() {
        $this->overriddenData = $this->data;
        if (isset($this->moduleOverrides) && is_array($this->moduleOverrides)) {
            $this->overriddenData = NestedArray::mergeDeepArray([
                $this->overriddenData,
                $this->moduleOverrides,
            ], TRUE);
        }
        if (isset($this->settingsOverrides) && is_array($this->settingsOverrides)) {
            $this->overriddenData = NestedArray::mergeDeepArray([
                $this->overriddenData,
                $this->settingsOverrides,
            ], TRUE);
        }
        return $this;
    }
    
    /**
     * Resets the current data, so overrides are re-applied.
     *
     * This method should be called after the original data or the overridden data
     * has been changed.
     *
     * @return $this
     *   The configuration object.
     */
    protected function resetOverriddenData() {
        unset($this->overriddenData);
        return $this;
    }
    
    /**
     * {@inheritdoc}
     */
    public function set($key, $value) {
        parent::set($key, $value);
        $this->resetOverriddenData();
        return $this;
    }
    
    /**
     * {@inheritdoc}
     */
    public function clear($key) {
        parent::clear($key);
        $this->resetOverriddenData();
        return $this;
    }
    
    /**
     * {@inheritdoc}
     */
    public function save($has_trusted_data = FALSE) {
        // Validate the configuration object name before saving.
        static::validateName($this->name);
        // If there is a schema for this configuration object, cast all values to
        // conform to the schema.
        if (!$has_trusted_data) {
            if ($this->typedConfigManager
                ->hasConfigSchema($this->name)) {
                // Ensure that the schema wrapper has the latest data.
                $this->schemaWrapper = NULL;
                $this->data = $this->castValue(NULL, $this->data);
            }
            else {
                foreach ($this->data as $key => $value) {
                    $this->validateValue($key, $value);
                }
            }
        }
        // Potentially configuration schema could have changed the underlying data's
        // types.
        $this->resetOverriddenData();
        $this->storage
            ->write($this->name, $this->data);
        if (!$this->isNew) {
            Cache::invalidateTags($this->getCacheTags());
        }
        $this->isNew = FALSE;
        $event_name = $this->getStorage()
            ->getCollectionName() === StorageInterface::DEFAULT_COLLECTION ? ConfigEvents::SAVE : ConfigCollectionEvents::SAVE_IN_COLLECTION;
        $this->eventDispatcher
            ->dispatch(new ConfigCrudEvent($this), $event_name);
        $this->originalData = $this->data;
        return $this;
    }
    
    /**
     * Deletes the configuration object.
     *
     * @return $this
     *   The configuration object.
     */
    public function delete() {
        $this->data = [];
        $this->storage
            ->delete($this->name);
        Cache::invalidateTags($this->getCacheTags());
        $this->isNew = TRUE;
        $this->resetOverriddenData();
        $event_name = $this->getStorage()
            ->getCollectionName() === StorageInterface::DEFAULT_COLLECTION ? ConfigEvents::DELETE : ConfigCollectionEvents::DELETE_IN_COLLECTION;
        $this->eventDispatcher
            ->dispatch(new ConfigCrudEvent($this), $event_name);
        $this->originalData = $this->data;
        return $this;
    }
    
    /**
     * Gets original data from this configuration object.
     *
     * Original data is the data as it is immediately after loading from
     * configuration storage before any changes. If this is a new configuration
     * object it will be an empty array.
     *
     * @see \Drupal\Core\Config\Config::get()
     *
     * @param string $key
     *   A string that maps to a key within the configuration data.
     * @param bool $apply_overrides
     *   Apply any overrides to the original data. Defaults to TRUE.
     *
     * @return mixed
     *   The data that was requested.
     */
    public function getOriginal($key = '', $apply_overrides = TRUE) {
        $original_data = $this->originalData;
        if ($apply_overrides) {
            // Apply overrides.
            if (isset($this->moduleOverrides) && is_array($this->moduleOverrides)) {
                $original_data = NestedArray::mergeDeepArray([
                    $original_data,
                    $this->moduleOverrides,
                ], TRUE);
            }
            if (isset($this->settingsOverrides) && is_array($this->settingsOverrides)) {
                $original_data = NestedArray::mergeDeepArray([
                    $original_data,
                    $this->settingsOverrides,
                ], TRUE);
            }
        }
        if (empty($key)) {
            return $original_data;
        }
        else {
            $parts = explode('.', $key);
            if (count($parts) == 1) {
                return $original_data[$key] ?? NULL;
            }
            else {
                $value = NestedArray::getValue($original_data, $parts, $key_exists);
                return $key_exists ? $value : NULL;
            }
        }
    }
    
    /**
     * Determines if overrides are applied to a key for this configuration object.
     *
     * @param string $key
     *   (optional) A string that maps to a key within the configuration data.
     *   For instance in the following configuration array:
     *   @code
     *   [
     *     'foo' => [
     *       'bar' => 'baz',
     *     ],
     *   ];
     *   @endcode
     *   A key of 'foo.bar' would map to the string 'baz'. However, a key of 'foo'
     *   would map to the ['bar' => 'baz'].
     *   If not supplied TRUE will be returned if there are any overrides at all
     *   for this configuration object.
     *
     * @return bool
     *   TRUE if there are any overrides for the key, otherwise FALSE.
     */
    public function hasOverrides($key = '') {
        if (empty($key)) {
            return !(empty($this->moduleOverrides) && empty($this->settingsOverrides));
        }
        else {
            $parts = explode('.', $key);
            $override_exists = FALSE;
            if (isset($this->moduleOverrides) && is_array($this->moduleOverrides)) {
                $override_exists = NestedArray::keyExists($this->moduleOverrides, $parts);
            }
            if (!$override_exists && isset($this->settingsOverrides) && is_array($this->settingsOverrides)) {
                $override_exists = NestedArray::keyExists($this->settingsOverrides, $parts);
            }
            return $override_exists;
        }
    }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title Overrides
CacheableDependencyTrait::$cacheContexts protected property Cache contexts.
CacheableDependencyTrait::$cacheMaxAge protected property Cache max-age.
CacheableDependencyTrait::$cacheTags protected property Cache tags.
CacheableDependencyTrait::setCacheability protected function Sets cacheability; useful for value object constructors.
Config::$eventDispatcher protected property An event dispatcher instance to use for configuration events.
Config::$moduleOverrides protected property The current module overrides.
Config::$overriddenData protected property The current runtime data.
Config::$settingsOverrides protected property The current settings overrides.
Config::clear public function Unsets a value in this configuration object. Overrides ConfigBase::clear 1
Config::delete public function Deletes the configuration object. Overrides StorableConfigBase::delete 1
Config::get public function Gets data from this configuration object. Overrides ConfigBase::get
Config::getOriginal public function Gets original data from this configuration object. Overrides StorableConfigBase::getOriginal
Config::hasOverrides public function Determines if overrides are applied to a key for this configuration object.
Config::initWithData public function Initializes a configuration object with pre-loaded data. Overrides StorableConfigBase::initWithData
Config::resetOverriddenData protected function Resets the current data, so overrides are re-applied.
Config::save public function Saves the configuration object. Overrides StorableConfigBase::save 1
Config::set public function Sets a value in this configuration object. Overrides ConfigBase::set 1
Config::setData public function Replaces the data of this configuration object. Overrides ConfigBase::setData
Config::setModuleOverride public function Sets module overrides for this configuration object.
Config::setOverriddenData protected function Sets the current data for this configuration object.
Config::setSettingsOverride public function Sets settings.php overrides for this configuration object.
Config::__construct public function Constructs a configuration object.
ConfigBase::$data protected property The data of the configuration object.
ConfigBase::$name protected property The name of the configuration object.
ConfigBase::castSafeStrings protected function Casts any objects that implement MarkupInterface to string.
ConfigBase::getCacheContexts public function The cache contexts associated with this object. Overrides CacheableDependencyTrait::getCacheContexts
ConfigBase::getCacheMaxAge public function The maximum age for which this object may be cached. Overrides CacheableDependencyTrait::getCacheMaxAge
ConfigBase::getCacheTags public function The cache tags associated with this object. Overrides CacheableDependencyTrait::getCacheTags 1
ConfigBase::getName public function Returns the name of this configuration object.
ConfigBase::MAX_NAME_LENGTH constant The maximum length of a configuration object name.
ConfigBase::merge public function Merges data into a configuration object.
ConfigBase::setName public function Sets the name of this configuration object.
ConfigBase::validateKeys protected function Validates all keys in a passed in config array structure.
ConfigBase::validateName public static function Validates the configuration object name.
DependencySerializationTrait::$_entityStorages protected property
DependencySerializationTrait::$_serviceIds protected property
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
RefinableCacheableDependencyTrait::addCacheableDependency public function 1
RefinableCacheableDependencyTrait::addCacheContexts public function
RefinableCacheableDependencyTrait::addCacheTags public function
RefinableCacheableDependencyTrait::mergeCacheMaxAge public function
StorableConfigBase::$isNew protected property Whether the configuration object is new or has been saved to the storage.
StorableConfigBase::$originalData protected property The data of the configuration object.
StorableConfigBase::$schemaWrapper protected property The config schema wrapper object for this configuration object.
StorableConfigBase::$storage protected property The storage used to load and save this configuration object.
StorableConfigBase::$typedConfigManager protected property The typed config manager.
StorableConfigBase::castValue protected function Casts the value to correct data type using the configuration schema.
StorableConfigBase::getRawData public function Gets the raw data without any manipulations.
StorableConfigBase::getSchemaWrapper protected function Gets the schema wrapper for the whole configuration object.
StorableConfigBase::getStorage public function Retrieves the storage used to load and save this configuration object.
StorableConfigBase::isNew public function Returns whether this configuration object is new.
StorableConfigBase::validateValue protected function Validate the values are allowed data types.
RSS feed
Powered by Drupal