[Drupal-8] How to create configuration form in Drupal 8
Submitted by webmaster
August 24, 2016 - 18:44
Drupal 8’s way of managing configuration forms is entirely different from Drupal 7. Assuming that you have a custom module, we shall see how to create simple configuration form.
First step is to create a route for the configuration form. Place the below code in 'your_module.routing.yml' file.
your_module.config: path: '/admin/config/your_module/settings' defaults: _form: '\Drupal\your_module\Form\ModuleConfigForm' _title: 'Module Configurations' requirements: _permission: 'administer site configuration'
Next step is to create a new file called 'ModuleConfigForm.php' in your_module/src/Form/. Paste the following code in the created file:
/** * @file * Contains \Drupal\simple\Form\ModuleConfigForm. */ namespace Drupal\your_module\Form; use Drupal\Core\Form\ConfigFormBase; use Drupal\Core\Form\FormStateInterface; class ModuleConfigForm extends ConfigFormBase { /** * {@inheritdoc} */ public function getFormId() { return 'your_module_config_form'; } /** * {@inheritdoc} */ public function buildForm(array $form, FormStateInterface $form_state) { $form = parent::buildForm($form, $form_state); $config = $this->config('your_module.settings'); $form['example_value1'] = array( '#type' => 'textfield', '#title' => $this->t('Example Value 1'), '#default_value' => $config->get('your_module.example_value1'), '#required' => TRUE, ); $form['example_value2'] = array( '#type' => 'textfield', '#title' => $this->t('Example Value 2'), '#default_value' => $config->get('your_module.example_value2'), ); $node_types = \Drupal\node\Entity\NodeType::loadMultiple(); $node_type_titles = array(); foreach ($node_types as $machine_name => $val) { $node_type_titles[$machine_name] = $val->label(); } $form['node_types'] = array( '#type' => 'checkboxes', '#title' => $this->t('For Node Types'), '#options' => $node_type_titles, '#default_value' => $config->get('your_module.node_types'), ); return $form; } /** * {@inheritdoc} */ public function submitForm(array &$form, FormStateInterface $form_state) { $config = $this->config('your_module.settings'); $config->set('your_module.example_value1', $form_state->getValue('example_value1')); $config->set('your_module.example_value2', $form_state->getValue('example_value2')); $config->set('your_module.node_types', $form_state->getValue('node_types')); $config->save(); return parent::submitForm($form, $form_state); } /** * {@inheritdoc} */ protected function getEditableConfigNames() { return [ 'your_module.settings', ]; } }
That’s it! Now you could access the form by going to /admin/config/your_module/settings. For getting the values in your module use the following lines of code.
$config = \Drupal::config('your_module.settings'); // This will print the value of example_value1. print $config->get('your_module.example_value1');
Hope this helps. Please feel free to get in touch with us if any queries