Skip to content

Instantly share code, notes, and snippets.

@crittermike
Last active June 6, 2025 11:21
Show Gist options
  • Save crittermike/2d2c6734c506d509505fa79142125757 to your computer and use it in GitHub Desktop.
Save crittermike/2d2c6734c506d509505fa79142125757 to your computer and use it in GitHub Desktop.
Importing Drupal 8 config programmatically
<?php
// Import arbitrary config from a variable.
// Assumes $data has the data you want to import for this config.
$config = \Drupal::service('config.factory')->getEditable('filter.format.basic_html');
$config->setData($data)->save();
// Or, re-import the default config for a module or profile, etc.
\Drupal::service('config.installer')->installDefaultConfig('module', 'my_custom_module');
// Or, import YAML config from an arbitrary file.
$config_path = drupal_get_path('module', 'my_custom_module') . '/config/install';
$source = new FileStorage($config_path);
$config_storage = \Drupal::service('config.storage');
$config_storage->write('filter.format.basic_html', $source->read('filter.format.basic_html'));
@bisonbleu
Copy link

bisonbleu commented Sep 8, 2021

@mike-potter I can't get your code to work: it seems the configs are not imported. Has anything changed since your post (Aug 19, 2020) that would account for that?
[update] The code works as suggested for simple configs e.g. filter.format.basic_html where I changed the name to 'BASIC HTML'. In my use case I'm trying to import a list of some 30+ configs. That's where my issue lies... maybe with unmet dependencies...

@JPustkuchen
Copy link

Also see:
https://gist.github.com/keopx/085852c4455fc6baaad421a0e9c46c8d

I think this definitely needs better API documentation at Drupal.org Docs - it's really horrible to find a way to update existing configuration programmatically, for example adding an entity field in a module using an update hook...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment