Maison > développement back-end > tutoriel php > Comment créer des formulaires en plusieurs étapes dans Drupal 8

Comment créer des formulaires en plusieurs étapes dans Drupal 8

Christopher Nolan
Libérer: 2025-02-17 09:31:08
original
994 Les gens l'ont consulté

Cet article montre la création d'une forme en plusieurs étapes dans Drupal 8 en utilisant deux formes distinctes et le stockage de données temporaire de base de Drupal. Ramovions l'explication et améliorons le flux.

Concepts clés:

  • Deux formulaires indépendants: La forme en plusieurs étapes est construite à partir de deux formes distinctes, chacune gérant un sous-ensemble de l'entrée utilisateur.
  • Classe de base abstraite (MultiStepFormbase): Les fonctionnalités communes, telles que l'injection de dépendance, l'échafaudage de forme et le traitement des données, sont centralisées dans une classe de base abstraite. Cela favorise la réutilisabilité et la maintenabilité du code.
  • privatetempstore: drupal's PrivateTempStore assure la persistance des données sur plusieurs demandes, permettant le processus en plusieurs étapes.
  • Définitions d'itinéraire: Les routes distinctes sont définies pour chaque formulaire, permettant la navigation entre les étapes.

Détails de l'implémentation:

La solution implique:

  1. MultiStepformBase.php: Cette classe de base abstraite gère les tâches communes:

    • Injection de dépendance: injecte PrivateTempStoreFactory, SessionManagerInterface, et AccountInterface.
    • Gestion de session: garantit une session pour les utilisateurs anonymes.
    • stockage de données: utilise PrivateTempStore pour stocker les données de formulaire (multistep_data clé).
    • Enregistrement des données (saveData()): un espace réservé pour la logique de sauvegarde des données réelle (l'implémentation dépend de vos besoins spécifiques).
    • Délétion des données (deleteStore()): supprime les données stockées après une soumission réussie.
  2. MultiStepOneForm.php: La première forme:

    • étend MultistepFormBase.
    • contient deux champs: name et email.
    • récupère des valeurs précédemment entrées de PrivateTempStore pour la pré-population.
    • redirige vers demo.multistep_two lors de la soumission.
  3. MultiSteptWoForm.php: La deuxième forme:

    • étend MultistepFormBase.
    • contient deux champs: age et location.
    • récupère des valeurs précédemment entrées à partir de PrivateTempStore.
    • comprend une redirection de liaison "précédente" vers demo.multistep_one.
    • appelle saveData() de la classe de base lors de la soumission puis redirige.
  4. Demo.Routing.yml: définit les routes pour demo.multistep_one et demo.multistep_two, les associant aux classes de forme respectives.

Captures d'écran illustratives:

How to Build Multi-step Forms in Drupal 8

How to Build Multi-step Forms in Drupal 8

Extraits de code (illustratif):

(MultiStepformBase.php - Extrat):

protected function saveData() {
  //  Save data (e.g., create a configuration entity)
  $this->deleteStore();
  drupal_set_message($this->t('Form saved!'));
}
Copier après la connexion

(MultiStepOneForm.php - Extrat):

$form['name'] = [
  '#type' => 'textfield',
  '#title' => $this->t('Your name'),
  '#default_value' => $this->store->get('name') ?: '',
];
Copier après la connexion

Conclusion:

Cette approche fournit un moyen propre et efficace de créer des formes en plusieurs étapes dans Drupal 8, en tirant parti de la puissance du PrivateTempStore pour la gestion des données croisées. L'utilisation d'une classe de base abstraite favorise l'organisation du code et la réutilisabilité. Cette structure peut facilement être étendue pour accueillir plus d'étapes. La section FAQ est omise ici pour la concision, car le corps de l'article couvre déjà les aspects essentiels.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal