Same name and namespace in other branches
  1. 8.9.x core/lib/Drupal/Core/Form/ConfigFormBaseTrait.php \Drupal\Core\Form\ConfigFormBaseTrait
  2. 9 core/lib/Drupal/Core/Form/ConfigFormBaseTrait.php \Drupal\Core\Form\ConfigFormBaseTrait

Provides access to configuration for forms.

This trait provides a config() method that returns override free and mutable config objects if the configuration name is in the array returned by the getEditableConfigNames() implementation.

Forms that present configuration to the user have to take care not to save configuration overrides to the stored configuration since overrides are often environment specific. Default values of form elements should be obtained from override free configuration objects. However, if a form reacts to configuration in any way, for example sends an email to the system.site:mail address, then it is important that the value comes from a configuration object with overrides. Therefore, override free and editable configuration objects are limited to those listed by the getEditableConfigNames() method.

Hierarchy

5 files declare their use of ConfigFormBaseTrait
ConfigFormBaseTraitTest.php in core/tests/Drupal/Tests/Core/Form/ConfigFormBaseTraitTest.php
ContactFormEditForm.php in core/modules/contact/src/ContactFormEditForm.php
CronForm.php in core/modules/system/src/Form/CronForm.php
NegotiationBrowserDeleteForm.php in core/modules/language/src/Form/NegotiationBrowserDeleteForm.php
SearchPageListBuilder.php in core/modules/search/src/SearchPageListBuilder.php

File

core/lib/Drupal/Core/Form/ConfigFormBaseTrait.php, line 23

Namespace

Drupal\Core\Form
View source
trait ConfigFormBaseTrait {

  /**
   * Retrieves a configuration object.
   *
   * @param string $name
   *   The name of the configuration object to retrieve. The name corresponds to
   *   a configuration file. For @code \Drupal::config('my_module.admin') @endcode,
   *   the config object returned will contain the contents of node.admin
   *   configuration file.
   *
   * @return \Drupal\Core\Config\Config|\Drupal\Core\Config\ImmutableConfig
   *   An editable configuration object if the given name is listed in the
   *   getEditableConfigNames() method or an immutable configuration object if
   *   not.
   */
  protected function config($name) {

    /** @var \Drupal\Core\Config\ConfigFactoryInterface $config_factory */
    if (method_exists($this, 'configFactory')) {
      $config_factory = $this
        ->configFactory();
    }
    elseif (property_exists($this, 'configFactory')) {
      $config_factory = $this->configFactory;
    }
    if (!isset($config_factory) || !$config_factory instanceof ConfigFactoryInterface) {
      throw new \LogicException('No config factory available for ConfigFormBaseTrait');
    }
    if (in_array($name, $this
      ->getEditableConfigNames())) {

      // Get a mutable object from the factory.
      $config = $config_factory
        ->getEditable($name);
    }
    else {
      $config = $config_factory
        ->get($name);
    }
    return $config;
  }

  /**
   * Gets the configuration names that will be editable.
   *
   * @return array
   *   An array of configuration object names that are editable if called in
   *   conjunction with the trait's config() method.
   */
  protected abstract function getEditableConfigNames();

}

Members

Name Modifierssort descending Type Description Overrides
ConfigFormBaseTrait::getEditableConfigNames abstract protected function Gets the configuration names that will be editable. 6
ConfigFormBaseTrait::config protected function Retrieves a configuration object.