The Config object is the primary interface to interact with the system configuration. You retrieve the Config object by calling the config() function like so:
$config = \Drupal::config('system.site');
This method returns a \Drupal\Core\Config\ImmutableConfig object that can only be used to read the configuration. If you need to modify the configuration, you can use the config.factory service, like so:
$config = \Drupal::service('config.factory')->getEditable('system.site');
To read attributes of the Config object, you can use the get() function, like:
$name = \Drupal::config('system.site')->get('name');
When retrieving nested configuration values, you can retrieve the full array of values using the get() function. For example, calling:
$pages = \Drupal::config('system.site')->get('page');
Will return an array with each value from the mapping, like so:
[ '403' => 'url', '404' => 'url', 'front' => 'url', ]
If you want to retrieve a nested value, you can specify the path to the value separated by periods. If you wanted to get the path to the 404 page, you could run:
$page_404 = \Drupal::config('system.site')->get('page.404');
The mutable Config objects have additional functions to set(), clear() and delete() configuration. Both set() and clear() can traverse nested configuration using periods like get(). The delete() function is used to remove whole configuration sections, for example:
// Set 404 page
\Drupal::service('config.factory')->getEditable('system.site')->set('page.404', 'new url');
// Clear 404 page setting
\Drupal::service('config.factory')->getEditable('system.site')->clear('page.404');
// Delete all system.site configuration
\Drupal::service('config.factory')->getEditable('system.site')->delete();
Once you have modified the Config object, you need to call save() to persist the change. These functions each return the Config object so you can chain multiple operations after each other. For example:
\Drupal::service('config.factory').getEditable('system.site')->set('page.404', 'new url')->set('page.403', 'new url')->save();