drupal 8用のカスタムWebフォームハンドラプラグインの作成。
このドキュメントでは、webformとwebform-uiが既にインストールされ、有効になっていることを前提としています
1)Webフォームを作成します。-構造-> webformsに移動し、「+ Add webform」ボタンを押します。-UIを使用するか、yamlを使用することができます。それはユーザー次第です。電子メールアドレスを取得する1つのフィールドフォームの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 create Pluginのプラグインcreate WebformHandler
(これは、一度に使用して達成できます
mkdir -p /var/www/html/modules/Custom/myhandler/src/Plugin/WebformHandler/
mkdirに-pフラグを使用すると、構造全体が一度に作成されます。)
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またはextendメニューを使用)、drupalキャッシュを再構築します(drushalを使用すると、drupalルート(/ var / www / htmlはここ)の下の任意の場所から "drush cr"を実行します)
6)Webフォームを編集し、「Email / Handlers」に進み、「+ Add Handler」ボタンをクリックします。リストにプラグインが表示され、「Add Handler」をクリックすると、送信URLを尋ねるボックスが表示されます。[保存]ボタンをクリックします。何かが正しく見えない場合、または機能していない場合は、Apacheエラーログを確認してください。そこで役立つ情報が見つかるかもしれません。
7)フォームをテストします-フォームへの送信を行い、ウォッチドッグログ(dws ws)を確認します。送信された値が表示されます。表示される出力ではそれらが切り捨てられる場合がありますが、パニックにならないでください。これで何をするかはあなた次第です。
これが誰かを助けることを願っています。私はその場所で見つけたものをまとめて一つの文書にまとめました。ここに来てくれた他の人に感謝します。
hook_form_alter()
必要があります。そうしないと、何が間違っているのかを伝えるのが少し難しくなります。また、変更しようとしているフォームを言う必要があります。