Direkt zum Inhalt
Bild
1920x600-14_3.jpg

Wie verwende ich die Batch API in Drupal 8?

AI-Translated
article publisher

Gaurav Kapoor

Drupal

Laut Drupal.org können Batch-Operationen definiert werden als "...eine Funktion, die es ermöglicht, die Formularverarbeitung auf mehrere Seitenanfragen zu verteilen, um sicherzustellen, dass die Verarbeitung aufgrund eines PHP-Timeouts nicht unterbrochen wird und der Benutzer gleichzeitig Feedback über den Fortschritt der laufenden Operationen erhält.".

In Drupal kann das Timeout ohne PHP mit der Batch API gesetzt werden, um Programmieroperationen reibungslos durchzuführen.

Nehmen wir zum Beispiel:

Drupal ist installiert und hook_install aller Kernmodule wird ausgeführt.

Dies ist eine rechenintensive Operation, die nicht in einer einzigen PHP-Anfrage abgeschlossen werden kann. Selbst wenn das PHP-Timeout auf 0 (Null) gesetzt ist, kann es zu einem Problem mit dem Speicher kommen.

Was tun Sie, wenn ein Benutzer keinen Zugriff hat, um das Standard-PHP-Timeout zu ändern?

Um dieses Problem zu beheben, werden alle Operationen so in Batches zusammengefasst, dass sie abgeschlossen sind, bevor das PHP-Operationstimeout eintritt.

Sie können die Batch API auch in Ihrem benutzerdefinierten Modul verwenden, um rechenintensive Operationen durchzuführen.

Anwendungsfall der Batch API

Der beste Weg, etwas in Drupal zu lernen, ist, das Verhalten von beigetragenen Projekten zu beobachten und dann deren Code zu überprüfen. Die Batch API wird von verschiedenen beigetragenen Modulen wie XML Sitemap und Pathauto verwendet. Werfen wir einen kurzen Blick auf zwei der Anwendungsfälle.

XML Sitemap: Es generiert eine Sitemap der Website. Es bietet dem Administrator die Möglichkeit, verschiedene Entitäten auszuwählen, deren Instanzen-URLs der Sitemap hinzugefügt werden. Es kann eine große Anzahl von Entitäten geben, und im Falle von mehrsprachigen Websites können Entitäten mehrere URLs haben. Obwohl die grundlegende Operation des Hinzufügens einer URL zur sitemap.xml-Datei schnell ist, können sich Entwickler aufgrund einer unbekannten Anzahl von URLs nicht darauf verlassen, die gesamte Operation in einer einzigen PHP-Anfrage durchzuführen.

Aus diesem Grund wurde die Erstellung der Sitemap in Operationen unterteilt und dann in Batches zusammengefasst.

Pathauto generiert URL-Alias für alle Nodes, Begriffe und andere Entitäten auf der Grundlage des vom Website-Administrator bereitgestellten Musters. Auch in diesem Fall erfolgt die Alias-Generierung aufgrund einer großen Anzahl von Entitäten in Batches und nicht in einer einzigen PHP-Anfrage.

Wir werden nun Schritt für Schritt ein benutzerdefiniertes Modul erstellen, um die Verwendung der BATCH API zu demonstrieren.

E-Mail-IDs werden vom Benutzer als Eingabe entgegengenommen, um zu überprüfen, ob alle E-Mails korrekt sind.
 

Erstellen Sie eine info.yml-Datei.

name: Batch Example  
description: Drupal 8 Batch Example.
type: module
core: 8.x


Erstellen Sie eine routing.yml-Datei, um eine Route für ein benutzerdefiniertes Formular zu definieren.

batch_example.form:
  path: '/batch-form'
  defaults:
    _title: 'Batch Example Form'
    _form: '\Drupal\batch_example\Form\BatchExampleForm'
  requirements:
    _permission: 'access content'


Erstellen Sie eine Form-Klasse im Ordner /src/Form.

<?php

namespace Drupal\batch_example\Form;

use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;

/**
 * Implements a Batch example Form.
 */
class BatchExampleForm extends FormBase {

  /**
   * {@inheritdoc}.
   */
  public function getFormId() {
    return 'batchexampleform';
  }

  /**
   * {@inheritdoc}.
   */
  public function buildForm(array $form, FormStateInterface $form_state) {
  
    $form['emailids'] = [
      '#type' => 'textarea', 
      '#title' => 'Email Ids',
      '#size' => 1000,
      '#description' => t('Enter the line separated email ids'),
      '#required' => TRUE,  
    ];

    $form['submit_button'] = [
      '#type' => 'submit',
      '#value' => $this->t('Start Batch'),
    ]; 

    return $form;
  }
   

  /**
   * {@inheritdoc}
   */
  public function validateForm(array &$form, FormStateInterface $form_state) {
  
  }

  /**
   * {@inheritdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    $emailids = $form_state->getValue('emailids');
    $emails = [];
    $emails = explode("\n",$emailids);
    
    $batch = array(
      'title' => t('Verifying Emails...'),
      'operations' => [],
      'init_message'     => t('Commencing'),
      'progress_message' => t('Processed @current out of @total.'),
      'error_message'    => t('An error occurred during processing'),
      'finished' => '\Drupal\batch_example\DeleteNode::ExampleFinishedCallback',
    );
    foreach ($emails as $key => $value) {
      $email = trim($value);
      $batch['operations'][] = ['\Drupal\batch_example\EmailCheck::checkEmailExample',[$email]];
    }

    batch_set($batch);

  }

Und das war's.

Abonnieren

Ready to start your digital transformation journey with us?

Related Blogs

Zurück von der DrupalCon Atlanta 2025: Ein Meilenstein für OpenSense Labs

DrupalCon Atlanta 2025 OpenSense Labs

„Fit. Schnell. Für die Ewigkeit gebaut.“ Das war nicht nur ein Slogan, sondern die Denkweise, mit der wir zur DrupalCon…

Erklärbare KI-Tools: SHAPs Stärke in der KI

Explainable AI tools Explainable AI And SHAP OpenSense Labs

Wissen Sie, was erklärbare KI-Tools sind? Erklärbare KI-Tools sind Programme, die zeigen, wie eine KI ihre Entscheidungen…

KI-Chatbots: Präzision und Persönlichkeit in Perfektion

Creating AI Chatbot OpenSense Labs

In der Welt der künstlichen Intelligenz ist die Entwicklung eines KI-Chatbots, der nicht nur akkurate Informationen liefert…