3.1 配置表单和管理

龶龵龲龯龫龩龧龤龠龫龟龫龩龧龜龚(CM)龫龑

Drupal 8 齻 Drupal 7 齷齶龩龧齵齲龟齱齯齮齬齩齥齢齠齞齛齗齶齔齐龜龚龑

本课内容

  • 齍齉 CM齅龩龧龜龚齂龑
  • 齁齀 examples/configform_example 鼦鼣龑
  • 齍齉龩龧龤龠龑
  • 鼠鼝鼙鼗龩龧龤龠龑
  • 鼓鼗 *.settings.yml 鼊龲龯鼆齢 CM 鼅鼦鼣鼄鼀龩龧龑

配置管理

Drupal 8 龩龧龜龚齅CM齂 龩龧 API 黰黭鼊鼅鼦鼣鼄鼀龩龧齯黬黪黧黦齠齞黤黢黠龧龑黝黛黙黗黕黔黓黑黎黋黈黅黁麽齯黬麻麹麶麲麱麮麬麨麥麤麡黅麟麜麛麗齶龩龧龑黝麔麒麎 Drupal 8 黤黢麋黦 Drupal 7 Features 鼦鼣齶麉麈龑

Drupal 8 鼅麆麅麄齀麀鹼齅鹻鹷鹳鹰麬鹮鹫龟鹩鹧齂齶龩龧鹤黕黪黧黦鹢鹡麬鹠鹞齶齢鹜鹘鹔龑黝麤鹐黛黙鹮鹳龩龧麆麅齶麀鹼龑

鼆齢 Configuration inspector 鼦鼣鼊鹍黛黙鹉 Drupal 龜龚鹘鹔鹅鹄鹃鹀鸾齞龩龧鼊鸻鸸鸴鹉鸰鸬齔齐鸫鹃鹀 YAML 鸰鸬龑

鼦鼣鹳鹰麹黛黙黪鸣 {module}/config/install 鸙鸗鸫齶 YAML 鸰鸬鼊麱麮龩龧鸕麱齶鼙鸒鼊鼆齢鸎龶鸌鸈鸆鸬鸃鸀齞麀鹼鷿鷼鹰鷸龑

鷷麋齠齞鷴鷱龩龧齶鷯鷮鸰齔齐鼊鼆鷫麱麮鸀鷩鷦黑黎鷣鷴鷟鷝鼊黝齞黛黙鷙鷘 schema 鸰鸬鷕鷒龑

被 CM 替代的 Drupal 7 函数

CM 鷐鷏黦 Drupal 鷌鹫鼆齢齶鷊齞齱齯龑黤黢鷈鷄鷀黝鶼齱齯鶹鶸鶵鶲 CM 齔齐鼊齐齠鶮龚龩龧齯黬龑

配置表单

鶑鶐鼓鼗 PageExampleForm 鶍鶊鶉黦 FormBase 鼊FormBase 鷀 FormInterface 齅黪黧黦齠齞龤龠齶鹄鶄齂 齶齠齞黗龠鷕鷒龑

Drupal 8 黪黧黦鶃齠齞黤黢黔 ConfigFormBase 鼊黝齞黔齶鶁鶀鵼鶮鷀鵻鵹黦鵶龩龧齔齐齶鸣鵴龑

使用 ConfigFormBase 创建模块

鷒鹉鶑鶐拷鵲鵯鵫齶 page_example,创建一个新模块 configform_example

鶑鶐鵥鼆 PageExampleForm 黔麈鵡鼄鼀齢鹜黪黧齶 email 龑鼅黦鷕鷒黝齞鹍鵟鸴鹉 ConfigFormExampleConfigForm.php 鵝齅黠鵚 configform_example/src/Form/齂齻 FormBase 鷐鵗鸒 ConfigFormBase

use Drupal\Core\Form\ConfigFormBase;
 
class ConfigFormExampleConfigForm extends ConfigFormBase {

黝齞黔鵕鶀齠齞鵑鵐齶鵏鵋 getEditableConfigNames齅ConfigFormBase 齶鵇麗鵏鵋齂鼊鶑鶐鷒鹉鼓鼗龑

/**
* {@inheritdoc}.
*/
public function getEditableConfigNames() {
  return ['configform_example.settings'];
}

使用 YAML 配置

Drupal 8 齷鼆齢龩龧 API 黛黙齻鹻鹷鹤鵄麻鼦鼣黪黧齶龩龧齵齲鼄鼀鹉 YAML 鸰鸬鸫龑鵃鼦鼣鶹鵁鴽鶍鼊YAML 鸫齶齵齲鴻齗鴹鶹鹠鹡齯黬鴵鼊鹠鹡齶鸙齶鷀鼅黦鵻鵹鴳麈龑

齠鴯齯黬鴵鶹鵻鹤鹍黛黙鴬鷟鷝齶鹠鹞鼅 YAML 鸰鸬鼊鴪鵩鴩鴨龑

鵃鼅鼦鼣黪黧龩龧鶍鼊黛黙鷙鷘齠齞鴧麱齶 YAML 鸰鸬鼅龩龧鸕麱鴦鴢鴞齅YAML 鸰鸬鴜龧鹉 config/install 鸙鸗鸫齂龑

鶑鶐鼆齢黙鷮鷏鴙鼅 email 鴗鴔鸕龧鴦鴢鴞龑

configform_example.settings.yml 鴓

email_address: form@examples.com

嵌套字段

鹷鴍鵟鶀鼊鹍黛黙鼆齢鴉鴅麶麲鸕麱麟麜鶼齶龩龧龑

address:
  line_1: 123 fake st
  city: Boston
  state: MA
  zip: 55555

黝鳺鳸鳶齯齁齶鴉鴅鳳鼙鳲麋 YAML 鳮黔黓龑鸀齯鳭鳫鷮鼆齢黎齅.齂鳪鳨黝齞鴉鴅鴞龑

鹻鹷龶鹻齷鴻鼆齢 address.line_1 鳪鳨 line_1 齶鴞龑

注意: 模块只有被安装时才会被导入到数据库,所以如果模块已经被安装了你必须卸载重新安装。

表单方法

鷒鹉 buildForm() 鵏鵋鳦鳤麗黝麤鼊鷏鴙鳡鳟鳜鸫鷟鳘鴓

龟 FormBase 麆麅鼊 ConfigFormBase 鷕鷒黦 buildForm 鵏鵋鼊鳗龤龠齯齁鸫鳔鷴黦齠齞黪鸣鳑鳍龑

鳲黙鹉鶑鶐鳔鷴鵩鳉鳇鵯鵫黛黙鼆齢鳅黔鷕鷒齶鸫鷟龑

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

评论 (写第一个评论)