Drupal8模块开发 - Drupal8配置API

翻译者:长风Drupal开发

原文地址:https://www.drupal.org/docs/8/api/form-api/configformbase-with-simple-configuration-api

这种类型的Drupal表单被用来在Drupal网站的配置页面创建表单。你可以通过设置配置表单来实现修改功能、views、或者实体的配置。

PS:在很多Drupal开发的网站中,都会用到配置表单,与直接在Drupal模块中写变量相比,使用Drupal配置表单更便于以后Drupal网站的维护。

Drupal配置表单可以极大地帮助你了解Drupal8配置API的工作原理。在Drupal 8,你不使用 {variables} 表以及variable_get/set/delete(),因为配置信息存储在数据库并同步到YML文件中。有可能禁用数据库来存储配置信息,但是他伴随而来的是性能问题。

简单配置API使用object比如$confing与YML文件同步。$config object CRUD (Create/Read/Update/Delete)。你可以简单地使用 ::get(), ::set(), 和 ::save()方法,你的数据将存储在{module}.settings.yml文件中。

例子
1、在你的your_module.info.yml文件中,定义配置路由
...
configure: your_module.admin_settings

2、在你your_module.routing.yml文件中,定义路由

...
your_module.admin_settings:
path: '/admin/config/your_module'
defaults:
_form: '\Drupal\your_module\Form\ModuleConfigurationForm'
_title: 'your_module configuration screen'
requirements:
_permission: 'administer site configuration'


3、在 your_module/src/Form/ModuleConfigurationForm.php文件中,定义表单
<?php

namespace Drupal\your_module\Form;

use Drupal\Core\Form\ConfigFormBase;use Drupal\Core\Form\FormStateInterface;

/**
 * Defines a form that configures forms module settings.
 */class ModuleConfigurationForm extends ConfigFormBase {

/**
 * {@inheritdoc}
 */
public function getFormId() {
return 'your_module_admin_settings';
}

/**
 * {@inheritdoc}
 */
protected function getEditableConfigNames() {
return [
'your_module.settings',
];
}

/**
 * {@inheritdoc}
 */
public function buildForm(array $form, FormStateInterface $form_state) {
$config = $this->config('your_module.settings');
$form['your_message'] = [
'#type' => 'textfield',
'#title' => $this->t('Your message'),
'#default_value' => $config->get('your_message'),
];
return parent::buildForm($form, $form_state);
}

/**
 * {@inheritdoc}
 */
public function submitForm(array &$form, FormStateInterface $form_state) {
$values = $form_state->getValues();
$this->config('your_module.settings')
->set('your_message', $values['your_message'])
->save();
parent::submitForm($form, $form_state);
}

}