hn-8.x-1.x-dev/modules/hn_config/src/Form/SettingsForm.php
modules/hn_config/src/Form/SettingsForm.php
<?php namespace Drupal\hn_config\Form; use Drupal\Core\Form\ConfigFormBase; use Drupal\Core\Form\FormStateInterface; use Drupal\system\Entity\Menu; /** * Class ConfigForm. */ class SettingsForm extends ConfigFormBase { /** * {@inheritdoc} */ protected function getEditableConfigNames() { return [ 'hn_config.settings', ]; } /** * {@inheritdoc} */ public function getFormId() { return 'hn_config_settings'; } /** * {@inheritdoc} */ public function buildForm(array $form, FormStateInterface $form_state) { $config = $this->config('hn_config.settings'); /** @var \Drupal\system\Entity\Menu[] $menus */ $menus = Menu::loadMultiple(); $menu_list = []; foreach ($menus as $menu) { $menu_list[$menu->id()] = $menu->label(); } $form['menus'] = [ '#type' => 'select', '#title' => t('Menus'), '#description' => t('Select the menus to be returned in the HN response. Hold CTRL to select multiple'), '#options' => $menu_list, '#default_value' => $config->get('menus'), '#multiple' => TRUE, ]; $default_entities = implode(PHP_EOL, $config->get('entities')); $form['entities'] = [ '#type' => 'textarea', '#title' => t('Config entities'), '#description' => t('Type in the configuration entity keys to add to the HN response. (One per line)'), '#default_value' => $default_entities, ]; return parent::buildForm($form, $form_state); } /** * {@inheritdoc} */ public function validateForm(array &$form, FormStateInterface $form_state) { $values = $form_state->getValues(); $entity_keys = array_map('trim', array_filter(explode(PHP_EOL, $values['entities'])) ); foreach ($entity_keys as $entity_key) { if (\Drupal::config($entity_key)->isNew()) { $form_state->setErrorByName($entity_key, t('Config entity %name does not exist', [ '%name' => $entity_key, ])); } } $form_state->setValue('entities', $entity_keys); parent::validateForm($form, $form_state); } /** * {@inheritdoc} */ public function submitForm(array &$form, FormStateInterface $form_state) { $values = $form_state->getValues(); // Save the config. $this->config('hn_config.settings') ->set('menus', array_keys($values['menus'])) ->set('entities', $values['entities']) ->save(); parent::submitForm($form, $form_state); } }