Configuration forms and management

概念

  • Configuration management
    提供一个集中的地方来存储configuration数据,可以在多个环境建导入导出配置信息。
  • Config Object
    是configuration的一个实例。
  • Configuration form
    是一个特殊的form,用来帮助存储configuration数据到数据库或文件。

其他理解

  1. enable module的时候,config/install/module_name.settings.yml中定义的数据会被导入到数据库中,
    在这之后,如果db中configuration数据发生变化的话,可以使用export/import在各个环境间导出/导入configuration数据。1.png
  2. config/install/config_form_example.settings.yml中定义的是实际操作的字段键值对,最后都会存储到db config表中。
  3. config/schema/config_form_example.schema.yml中定义的是实际操作的字段的定义。2.png

Configuration forms最小化实现

  1. config_form_example.info.yml
  2. config/install/config_form_example.settings.yml

    1
    email_address: form@examples.com
  3. src/Form/ConfigFormExampleConfigForm.php

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    /**
    * {@inheritdoc}.
    */
    public function getFormId() {
    return 'config_form_example_form';
    }
    /**
    * {@inheritdoc}.
    */
    public function buildForm(array $form, FormStateInterface $form_state) {
    $form = parent::buildForm($form, $form_state);
    $config = $this->config('config_form_example.settings');
    $form['email'] = [
    '#type' => 'email',
    '#title' => $this->t('Your .com email address.'),
    '#default_value' => $config->get('email_address'),
    ];
    return $form;
    }
    /**
    * {@inheritdoc}
    */
    public function validateForm(array &$form, FormStateInterface $form_state) {
    if (strpos($form_state->getValue('email'), '.com') === FALSE ) {
    $form_state->setErrorByName('email', $this->t('This is not a .com email address.'));
    }
    }
    /**
    * {@inheritdoc}
    */
    public function submitForm(array &$form, FormStateInterface $form_state) {
    $config = $this->config('config_form_example.settings');
    $config->set('email_address', $form_state->getValue('email'));
    $config->save();
    return parent::submitForm($form, $form_state);
    }
    /**
    * {@inheritdoc}
    */
    protected function getEditableConfigNames() {
    return ['config_form_example.settings'];
    }
  4. config_form_example.routing.yml

  5. config/schema/config_form_example.schema.yml (optional)

参考资料

Configuration forms and management