DRUPAL8模块开发-添加一个表单到区块的配置中

翻译者:长风Drupal开发

原文地址:https://www.drupal.org/docs/8/creating-custom-modules/add-a-form-to-the-block-configuration

接下来,我们想为Drupal8区块的实例添加一个可以输入配置信息的表单,所有在Drupal8站点中的配置信息都可以被导入或者导出到生产站点,作为一个Drupal8模块开发者,同样可以提供可以为Drupal建站者提供一个自动填写表单的配置信息。

在你已经存在的 HelloBlock 类,加入如下:

use Drupal\Core\Block\BlockPluginInterface;
use Drupal\Core\Form\FormStateInterface;

更新这个类的声明

class HelloBlock extends BlockBase implements BlockPluginInterface {

下面的代码只是添加一个表单,表单的操作和结果保存将在下面一个章节中讲述。

/**
 * {@inheritdoc}
 */
public function blockForm($form, FormStateInterface $form_state) {
$form = parent::blockForm($form, $form_state);

$config = $this->getConfiguration();

$form['hello_block_name'] = array(
'#type' => 'textfield',
'#title' => $this->t('Who'),
'#description' => $this->t('Who do you want to say helloto?'),
'#default_value' => isset($config['hello_block_name']) ? $config['hello_block_name'] : '',
);
return $form;
}

在这个例子中,这个Drupal8的表单第一次被定义是通过引用它的父类,通过这段代码$form = parent::blockForm($form, $form_state );

接下来,我们想Drupal8的表单中添加新的字段,

最后,我们告诉Drupal存储这些值,下面是例子

/**
 * {@inheritdoc}
 */
public function blockSubmit($form, FormStateInterface $form_state) {
parent::blockSubmit($form, $form_state);
$values = $form_state->getValues();
$this->configuration['hello_block_name'] = $values['hello_block_name'];
}

要查看我们定义的这个Drupal8表单,可以到admin->structure->Block 找到hello world区块。