Implementing own handlers

Last updated on
30 April 2025

You are browsing documentation for an older version of Drupal, which is not supported any longer, and the information may not be correct. See current documentation for Contributed modules

Each configuration managed by the Configuration Management module is controlled by a handler. For example, the content types configurations are controlled by the ContentTypeConfiguration class.

You can define the controllers for your custom configurations by following these simple steps:

Create a module and implement hook_configuration_handlers_alter()

/**
 * Implements hook_configuration_handlers_alter().
 *
 * @see configuration_configuration_handlers().
 */
function yourmodule_configuration_handlers_alter(&$handlers) {
  $handlers['foo'] = '\Drupal\yourmodule\Config\FooConfiguration';
}

Create a FooConfiguration.php file in yourmodule/lib/Drupal/yourmodule/Config.

The class must extend the Configuration Class or a child class of it. This is a really simple example of how this file should look:


/**
 * @file
 * Definition of Drupal\configuration\Config\FooConfiguration.
 */

namespace Drupal\configuration\Config;

use Drupal\configuration\Config\Configuration;
use Drupal\configuration\Utils\ConfigIteratorSettings;

class FooConfiguration extends Configuration {

  /**
   * Overrides Drupal\configuration\Config\Configuration::isActive().
   */
  public static function isActive() {
    return module_exists('yourmodule');
  }

  /**
   * Overrides Drupal\configuration\Config\Configuration::getComponentHumanName().
   */
  static public function getComponentHumanName($component, $plural = FALSE) {
    return $plural ? t('Fooooo') : t('Foo');
  }

  /**
   * Overrides Drupal\configuration\Config\Configuration::getComponent().
   */
  public function getComponent() {
    return 'foo';
  }

  /**
   * Overrides Drupal\configuration\Config\Configuration::supportedComponents().
   */
  static public function supportedComponents() {
    return array('foo');
  }

  /**
   * Overrides Drupal\configuration\Config\Configuration::getAllIdentifiers().
   */
  public static function getAllIdentifiers($component) {
    $objects = db_query("SELECT machine_name, title FROM {foo}")->fetchAll();
    $return = array();
    foreach ($objects as $object) {
      $return[$object->machine_name] = $object->title;
    }
    return $return;
  }

  /**
   * Implements Drupal\configuration\Config\Configuration::prepareBuild().
   */
  protected function prepareBuild() {
    $this->data = foo_load($this->getIdentifier());
    return $this;
  }

  /**
   * Implements Drupal\configuration\Config\Configuration::saveToActiveStore().
   */
  public function saveToActiveStore(ConfigIteratorSettings &$settings) {
    foo_save($this->getData());
    $settings->addInfo('imported', $this->getUniqueId());
  }

}

Help improve this page

Page status: Not set

You can: