Skip to content

Instantly share code, notes, and snippets.

@andriyun
Last active August 19, 2020 15:42
Show Gist options
  • Save andriyun/98f0274184ac4dc7069771233031ceee to your computer and use it in GitHub Desktop.
Save andriyun/98f0274184ac4dc7069771233031ceee to your computer and use it in GitHub Desktop.
Update drupal configuration programmatically from yml files.
  • Delete configuration from database using configuration management API.

    Drupal::configFactory()->getEditable('automated_cron.settings')->delete();
  • Create configuration in database using configuration management API.

    Drupal::service('config.storage')->write(
      'views.view.content',
      Symfony\Component\Yaml\Yaml::parse(file_get_contents('./config/sync/views.view.content.yml'))
    );
  • Import arbitary yml file into configuration.

    $source = new FileStorage($path);
    $config_storage = \Drupal::service('config.storage');
    $config_name = 'field.storage.node.field_body';
    $config_storage->write($config_name, $source->read($config_name));
  • Create fields storage
  $path = 'path/to/config';
  $entity_type = 'field_name';
  $field_name = 'node';
  
  // Variant 1. Using coonfig ctorage writer.
  if (!FieldStorageConfig::loadByName($entity_type, 'field_name')) {
    $source = new FileStorage($path);
    $config_storage = \Drupal::service('config.storage');
    $config_name = 'field.storage.' . $entity_type . '.' . $field_name;
    $config_storage->write($config_name, $source->read($config_name));
  }
  
  // Variant 2. Using FieldStorageConfig onject.
    $field_storage_yml = Yaml::parse(file_get_contents($path . '/field.storage.media.field_media_image.yml'));
  if (!FieldStorageConfig::loadByName($field_storage_yml['entity_type'], $field_storage_yml['field_name'])) {
    FieldStorageConfig::create($field_storage_yml)->save();
  }
  • Create field instance
  $field_instance_yml = Yaml::parse(file_get_contents($path . '/field.field.media.image.field_media_image.yml'));
  if (!FieldConfig::loadByName($field_instance_yml['entity_type'], $field_instance_yml['bundle'], $field_instance_yml['field_name'])) {
    FieldConfig::create($field_instance_yml)->save();
  }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment