翻译者:长风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);
}
}