Création d'un plugin de gestion de formulaire Web personnalisé pour drupal 8.
Ce document suppose que vous avez déjà installé et activé webform et webform-ui
1) Créez votre formulaire Web. - Allez dans la structure -> formulaires Web et appuyez sur le bouton "+ Ajouter un formulaire Web". - Vous pouvez soit utiliser l'interface utilisateur ou utiliser yaml, cela dépend de vous. exemple yaml pour un formulaire à un champ qui prend une adresse e-mail:
email:
'#type': email
'#title': email
'#title_display': invisible
'#placeholder': 'ENTER YOUR EMAIL'
'#attributes':
class:
- my-ip
L'indentation est importante pour yaml alors assurez-vous de bien faire les choses. les retraits sont des espaces.
Enregistrez maintenant votre formulaire.
2) Création d'un plugin de gestion de formulaire Web
Ensuite, nous pouvons créer un nouveau plugin qui apparaîtra dans la section "Emails / Handlers" lors de la modification du formulaire Web. Je l'appellerai myhandler, vous pouvez l'appeler comme vous voulez, à condition de remplacer toutes les mentions de myhandler par le nom que vous choisissez.
a) Créez un nouveau dossier pour votre plugin, faites-le dans votre racine drupal (appelé ici / var / www / html /) dans le sous-dossier suivant: / var / www / html / modules / Custom / myhandler
b) Créer un nouveau fichier dans le répertoire ci-dessus appelé myhandler.info.yml dans ce fichier va comme suit:
name: My Form Handler
description: handles form submits, does something with them.
package: Custom
type: module
version: 1.0
core: 8.x
3) Créez un répertoire src dans le répertoire de votre module, par exemple: / var / www / html / modules / Custom / myhandler / src dans src create Plugin dans Plugin create WebformHandler
(cela peut être réalisé en une seule fois en utilisant
mkdir -p /var/www/html/modules/Custom/myhandler/src/Plugin/WebformHandler/
ce qui rendra la structure entière en une seule fois en utilisant le drapeau -p pour mkdir.)
4) Créez un nouveau fichier /var/www/html/modules/Custom/myhandler/src/Plugin/WebformHandler/MyFormHandler.php
dans ce fichier contient le code php suivant, j'ai laissé la configuration du formulaire de configuration afin que vous puissiez voir comment configurer votre plugin si nécessaire.
<?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) Activez votre module MyHandler (en utilisant le menu drush ou extend) puis reconstruisez votre cache drupal ("drush cr" de n'importe où sous votre racine drupal (/ var / www / html ici) le ferait si vous utilisez drush)
6) éditez votre formulaire Web, allez dans "E-mail / Gestionnaires" et cliquez sur le bouton "+ Ajouter un gestionnaire" Vous devriez voir votre plugin répertorié, cliquez sur Ajouter un gestionnaire, vous devriez maintenant voir une boîte demandant l'url de soumission. cliquez sur le bouton Enregistrer. Si quelque chose ne semble pas correct ou ne fonctionne pas, consultez le journal des erreurs Apache, vous y trouverez peut-être quelque chose d'utile.
7) Testez votre formulaire - faites une soumission au formulaire, puis vérifiez le journal de surveillance (drush ws), vous devriez voir les valeurs qui lui sont envoyées. Ils peuvent être tronqués dans la sortie que vous voyez, pas de panique, tout est là. Ce que vous en faites maintenant dépend de vous.
J'espère que cela aide quelqu'un. Je l'ai bricolé à partir de trucs que j'ai trouvés autour de l'endroit et l'ai écrit dans un seul document. Merci aux autres qui m'ont amené ici.
hook_form_alter()
, ou c'est un peu plus difficile de vous dire ce que vous faites mal. Vous devez également indiquer la forme que vous essayez de modifier.