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

评论 (写第一个评论)