为drupal 8创建自定义的Webform处理程序插件。
本文档假定您已经安装并启用了webform和webform-ui
1)创建您的网络表单。-转到结构->网络表单,然后按“ +添加网络表单”按钮。-您可以使用ui或yaml,由您决定。包含电子邮件地址的一个字段表单的示例yaml:
email:
'#type': email
'#title': email
'#title_display': invisible
'#placeholder': 'ENTER YOUR EMAIL'
'#attributes':
class:
- my-ip
缩进对于yaml很重要,因此请确保正确。缩进是空格。
现在保存您的表格。
2)创建一个Webform处理程序插件
接下来,我们可以创建一个新插件,该插件将在编辑网络表单时显示在“电子邮件/处理程序”部分中。我将其称为myhandler,只要您用选择的名称替换所有提及myhandler的内容,就可以随意命名。
a)为您的插件创建一个新文件夹,在以下子文件夹的drupal根目录(此处称为/ var / www / html /)中执行此操作:/ var / www / html / modules / Custom / myhandler
b)在上面的目录中创建一个名为myhandler.info.yml的新文件,该文件中包含以下内容:
name: My Form Handler
description: handles form submits, does something with them.
package: Custom
type: module
version: 1.0
core: 8.x
3)在您的模块目录中创建一个src目录,例如:src中的/ var / www / html / modules / Custom / myhandler / src在插件中创建插件在插件中创建WebformHandler
(这可以使用
mkdir -p /var/www/html/modules/Custom/myhandler/src/Plugin/WebformHandler/
这将使用-p标志对mkdir一次完成整个结构。)
4)创建一个新文件 /var/www/html/modules/Custom/myhandler/src/Plugin/WebformHandler/MyFormHandler.php
在该文件中包含以下php代码,我将配置表单设置保留在其中,因此您可以查看如何根据需要配置插件。
<?php
namespace Drupal\myhandler\Plugin\WebformHandler;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Serialization\Yaml;
use Drupal\Core\Form\FormStateInterface;
use Drupal\webform\Plugin\WebformHandlerBase;
use Drupal\webform\webformSubmissionInterface;
/**
* Form submission handler.
*
* @WebformHandler(
* id = "myhandler_form_handler",
* label = @Translation("MyHandler form handler"),
* category = @Translation("Form Handler"),
* description = @Translation("Do something extra with form submissions"),
* cardinality = \Drupal\webform\Plugin\WebformHandlerInterface::CARDINALITY_SINGLE,
* results = \Drupal\webform\Plugin\WebformHandlerInterface::RESULTS_PROCESSED,
* )
*/
class MyFormHandler extends WebformHandlerBase {
/**
* {@inheritdoc}
*/
public function defaultConfiguration() {
return [
'submission_url' => 'https://api.example.org/SOME/ENDPOINT',
];
}
/**
* {@inheritdoc}
*/
public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
$form['submission_url'] = [
'#type' => 'textfield',
'#title' => $this->t('Submission URL to api.example.org'),
'#description' => $this->t('The URL to post the submission data to.'),
'#default_value' => $this->configuration['submission_url'],
'#required' => TRUE,
];
return $form;
}
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, FormStateInterface $form_state, WebformSubmissionInterface $webform_submission) {
// Your code here.
// Get an array of the values from the submission.
$values = $webform_submission->getData();
// Get the URL to post the data to.
$post_url = $this->configuration['submission_url'];
$message = "MyHandler got form data:".print_r($values,1);
\Drupal::logger('myformhandler')->error($message);
return true;
}
}
?>
5)启用MyHandler模块(使用drush或扩展菜单),然后重建您的drupal缓存(如果您使用drush,则可以在您drupal根目录下的任何地方(“ / var / www / html”处都是“ drush cr”))
6)编辑您的Web表单,转到“电子邮件/处理程序”,然后单击“ +添加处理程序”按钮。您应该看到列出的插件,单击“添加处理程序”,现在应该看到一个询问提交网址的框。单击保存按钮。如果某些东西看起来不正确或不起作用,请检查apache错误日志,您可能会在这里找到有用的信息。
7)测试您的表单-提交表单,然后检查看门狗日志(wsrush),您应该看到发送给它的值。在您看到的输出中,它们可能会被截断,不要惊慌,它就在那里。您现在该做什么取决于您。
希望这对某人有帮助。我将在该地点发现的东西拼凑在一起,并将其写到一个文档中。多亏其他把我带到这里的人。
hook_form_alter()
,否则很难告诉您您做错了什么。另外,您应该说出您要更改的形式。