滚动
配置表单 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', ]; } }