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;
}

评论 (写第一个评论)