With over a decade of web development experience, I specialize in Drupal (7, 8, 9, 10), CodeIgniter, Laravel, and WordPress. I offer extensive expertise in both module and theme development, providing customized solutions for complex projects. Whether you need to enhance an existing platform, create new features, or seek expert guidance, I'm here to assist. My dedication to delivering high-quality, efficient, and scalable solutions is unmatched. Feel free to contact me to explore how I can contribute to your project's success. Let's turn your ideas into reality!

“Improve Drupal 9 forms using Webform Handlers, extending functionality for an enhanced user experience and improved interaction.”

Webforms in Drupal 9 provide a powerful tool for creating dynamic and interactive forms. One of the key features of Webforms is the ability to extend their functionality through handlers. Handlers allow developers to customize form submissions, process data, and perform additional actions. In this guide, we'll explore the concept of Webform handlers and demonstrate how to create a custom module that calls an API upon form submission.

Understanding Webform Handlers

Webform handlers are plugins responsible for processing the form submissions. They can perform various tasks, such as sending emails, integrating with third-party services, or executing custom code. Handlers are part of the Webform API and can be extended to meet specific requirements.

Creating a Custom Module for Webform Handler

Let's create a custom module called custom_webform_handler that adds a handler to a Webform, which calls an API upon submission.

Step 1: Create the Module

Create a new folder named custom_webform_handler in the modules/custom directory of your Drupal installation. Inside this folder, create the necessary files: custom_webform_handler.info.yml, custom_webform_handler.module, and src/Plugin/WebformHandler/CustomApiHandler.php.

Step 2: Define the Module Information

Edit custom_webform_handler.info.yml and define the module information:

name: 'Custom Webform Handler' 
type: module 
description: 'A custom module to demonstrate Webform handlers calling an API.' 
core_version_requirement: ^8 || ^9 
package: Custom

Step 3: Create the Handler Plugin

Create the handler plugin at src/Plugin/WebformHandler/CustomApiHandler.php:

<?php

namespace Drupal\custom_webform_handler\Plugin\WebformHandler;

use Drupal\webform\Plugin\WebformHandlerBase;
use Drupal\webform\WebformSubmissionInterface;

/**
 * Custom Webform handler to call an API upon submission.
 *
 * @WebformHandler(
 *   id = "custom_api_handler",
 *   label = @Translation("Custom API Handler"),
 *   category = @Translation("Custom"),
 *   description = @Translation("Calls an API upon Webform submission."),
 *   cardinality = \Drupal\webform\Plugin\WebformHandlerInterface::CARDINALITY_SINGLE,
 *   results = \Drupal\webform\Plugin\WebformHandlerInterface::RESULTS_PROCESSED,
 * )
 */
class CustomApiHandler extends WebformHandlerBase {

  /**
   * {@inheritdoc}
   */
  public function submitForm(array &$form, WebformSubmissionInterface $webform_submission) {
    // Get form submission data.
    $data = $webform_submission->getData();

    // Call the custom API with the submission data.
    $this->callApi($data);
  }

  /**
   * Custom method to call the API.
   */
  private function callApi($data) {
    // Replace this with your API call implementation.
    // Example: Make a POST request to an API endpoint.
    // $url = 'https://example.com/api/endpoint';
    // $response = \Drupal::httpClient()->post($url, ['json' => $data]);
    // Log the API response or perform any other actions.
    // \Drupal::logger('custom_webform_handler')->info('API response: ' . $response->getBody());
  }

}

Step 4: Enable the Module

Enable the custom_webform_handler module either through the Drupal admin interface or by using Drush:

drush en custom_webform_handler

Step 5: Add the Custom Handler to a Webform

  1. Create or edit a Webform through the Drupal admin interface.
  2. In the "Settings" tab, navigate to the "Handlers" sub-tab.
  3. Add a new handler and select "Custom API Handler" from the list.
  4. Configure the handler settings if needed.

Now, every time the Webform is submitted, the CustomApiHandler will be triggered, and the specified API call will be made.

This example provides a basic structure for creating a custom Webform handler in Drupal 9. Adjust the code according to your specific requirements and API integration needs. Handlers offer a flexible way to extend the functionality of Webforms, allowing you to tailor them to the unique needs of your Drupal projects.

Posted by Sujan Shrestha
Categorized:
PREVIOUS POST
banner