滚动
配置表单 Drupal
Drupal 8 基础模块构建实用指南 第四部分
从 .info 到测试,只涵盖基础内容
到目前为止一切都相当整洁,但我们如何更改所看到的内容呢?当然是通过一些表单。
简单的使用场景请参见 «站点参数和标签» 部分。
/src/Form/LoremIpsumForm.php
<?php
namespace Drupal\loremipsum\Form;
use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;
class LoremIpsumForm extends ConfigFormBase {
/**
* {@inheritdoc}
*/
public function getFormId() {
return 'loremipsum_form';
}
我们开始编写的配置文件继承了 ConfigFormBase。LoremIpsumForm 类是在 routing.yml 文件中指定的类。
接下来是一个实际构建配置表单的方法:
/**
* {@inheritdoc}
*/
public function buildForm(array $form, FormStateInterface $form_state) {
// 表单构造函数.
$form = parent::buildForm($form, $form_state);
// 默认设置.
$config = $this->config('loremipsum.settings');
变量 $config 是我们存储当前配置的地方。
然后我们定义表单字段并返回表单:
// 页面标题字段.
$form['page_title'] = array(
'#type' => 'textfield',
'#title' => $this->t('Lorem ipsum 生成器页面标题:'),
'#default_value' => $config->get('loremipsum.page_title'),
'#description' => $this->t('为你的 lorem ipsum 生成器页面提供一个标题.'),
);
// 源文本字段.
$form['source_text'] = array(
'#type' => 'textarea',
'#title' => $this->t('用于 lorem ipsum 生成的源文本:'),
'#default_value' => $config->get('loremipsum.source_text'),
'#description' => $this->t('每行写一句话。这些句子将被用于生成随机文本.'),
);
return $form;
}
我们还必须声明 validateForm()、submitForm() 和 getEditableConfigNames() 方法,即使我们不使用它们:
/**
* {@inheritdoc}
*/
public function validateForm(array &$form, FormStateInterface $form_state) {
}
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, FormStateInterface $form_state) {
$config = $this->config('loremipsum.settings');
$config->set('loremipsum.source_text', $form_state->getValue('source_text'));
$config->set('loremipsum.page_title', $form_state->getValue('page_title'));
$config->save();
return parent::submitForm($form, $form_state);
}
/**
* {@inheritdoc}
*/
protected function getEditableConfigNames() {
return [
'loremipsum.settings',
];
}
}