Блог экспериментатора инженера-разработчика: Infanty.
Я пишу how-to статьи на редкие темы или статьи обзоры - для себя и тех кто со мной работает.
Блог существует при поддержке: "Оккупационных сил Марса".

Доработаем форму из предшествующего урока добавив в неё базовые настройки загружаемые из файла с конфигурацией. Заменяем в файле DemoForm.php (./modules/demo/src/Form/DemoForm.php) строки:

use Drupal\Core\Form\FormBase;

class DemoForm extends FormBase { 

на

use Drupal\Core\Form\ConfigFormBase;

class DemoForm extends ConfigFormBase { 

Тем самым мы наследуем класс не от базовой формы, а от формы поддерживающей конфигурацию.

В Drupal 8 имеется компонент который помогает загружать конфигурацию из YAML файлов. Создадим такой файл с конфигурацией для нашей формы, для этого в папке модуля создадим подпапку: config, а в ней папку install с файлом: demo.settings.yml.

demo:
  email_address: demo@demo.com 

Для того, что бы созданный файл конфигурации был использован Drupal 8, придётся переустановить модуль, после создания в нём файла конфигурации.

После чего необходимо дополнить функцию buildForm в файле DemoForm.php, для использования в ней конфигурационного файла. Для этого заменяем:

    $form['email'] = array(
      '#type' => 'email',
      '#title' => $this->t('Your .com email address.')
    );
    $form['show'] = array(
      '#type' => 'submit',
      '#value' => $this->t('Submit'),
    );

на

  $form = parent::buildForm($form, $form_state); 
 
  $config = $this->config('demo.settings');  
  $form['email'] = array(
    '#type' => 'email',
    '#title' => $this->t('Your .com email address.'),
    '#default_value' => $config->get('demo.email_address')
  );

Т.е. больше не нужно явно задавать в форме кнопку: "submit".

Так же если есть необходимость не просто загружать настройки из конфигурационного файла, но и сохранять их, то для этого необходимо изменить / дополнить функцию submitForm в файле DemoForm.php. Заменим:

  public function submitForm(array &$form, array &$form_state) {   
    drupal_set_message($this->t('Your email address is @email', array('@email' => $form_state['values']['email'])));
  } 

на

 public function submitForm(array &$form, array &$form_state) {
  
  $config = $this->config('demo.settings');
  $config->set('demo.email_address', $form_state['values']['email']);
  $config->save();
  
  return parent::submitForm($form, $form_state);
} 

При сохранении конфигурации, файл demo.settings.yml не изменится, но при экспорте конфигураций с сайта будет экспортировано текущее сохраненёное значение, а не стартовое значение из файла (при условии, что оно было изменено).

Перед тестированием приведённого выше функционала, необходимо сбросить кэш сайта.