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());
  }

}

Comments

nazim7’s picture

namespace Drupal\configuration\Config;
should be
namespace Drupal\yourmodule\Config;