翻译者:长风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区块。