Retour au blog

Comment créer et utiliser les services Drupal 8+ : un guide détaillé avec du code pratique

2023-04-153 min de lecture

Drupal, le système de gestion de contenu open-source, a parcouru un long chemin depuis sa création. Avec la sortie de Drupal 8, nous avons assisté à un changement massif dans l'architecture sous-jacente : l'adoption d'une approche de programmation plus orientée objet utilisant les composants Symfony. Un composant notable introduit dans Drupal 8 est le conteneur de services, qui a depuis amélioré la façon dont les modules et les thèmes sont développés.

Cet article donnera un aperçu approfondi des services Drupal 8+ et de la manière dont ils peuvent être utilisés pour créer un code efficace, modulaire et maintenable. De plus, nous présenterons un exemple de code pour une meilleure compréhension.

Qu'est-ce que les services Drupal ?

Dans Drupal 8+, les services sont des composants ou des objets réutilisables qui fournissent des fonctionnalités spécifiques. Ils sont conçus pour suivre le modèle de conception de l'Injection de Dépendances (DI) et sont généralement stockés dans le conteneur de services. Ce modèle de conception vous permet de créer un code faiblement couplé, ce qui le rend plus facile à gérer et à maintenir.

Quelques exemples de services Drupal incluent la connexion à la base de données, le gestionnaire d'entités et le rendu.

Créer un service personnalisé

Pour fournir un service personnalisé dans votre module, vous devez créer un fichier services.yml dans le répertoire racine de votre module. Ce fichier est utilisé pour définir la classe de votre nouveau service et toutes les dépendances qu'il pourrait avoir. Tous les services sont créés en tant qu'instances de classes PHP.

Étape 1 : Créer le fichier services.yml

  1. Tout d'abord, créez un fichier YAML nommé votremodule.services.yml, en remplaçant « votremodule » par le nom machine de votre module.
  2. Définissez le service dans le fichier YAML, y compris sa classe et tous les services nécessaires.

Voici un exemple de fichier services.yml :

services:
  votremodule.sample_service:
    class: Drupal\votremodule\SampleService
    arguments: ['@database']

Étape 2 : Créer la classe de service

  1. Créez un nouveau répertoire nommé src dans le répertoire racine de votre module.
  2. À l'intérieur du répertoire src, créez un fichier PHP portant le même nom que la classe définie dans le fichier YAML. Dans notre exemple, ce serait SampleService.php.
  3. Définissez la classe dans le nouveau fichier, étendez toutes les classes de base nécessaires et implémentez toutes les interfaces requises. Utilisez l'injection de dépendances pour construire la classe.

Voici un exemple de fichier SampleService.php :

// Définir l'espace de noms pour cette classe.
namespace Drupal\votremodule;

// Importer la classe Drupal\Core\Database\Connection pour qu'elle puisse être utilisée dans cette classe.
use Drupal\Core\Database\Connection;

// Définir une classe appelée SampleService.
class SampleService {

  // Définir une propriété appelée $database qui peut être accessible dans cette classe.
  protected $database;

  // Définir une méthode constructeur qui prend un objet Connection et l'assigne à la propriété $database.
  public function __construct(Connection $database) {
    $this->database = $database;
  }

  // Définir une méthode appelée fetchAllUsers qui renvoie tous les utilisateurs de la table 'users' dans la base de données.
  public function fetchAllUsers() {
    // Créer une nouvelle requête de sélection sur la table 'users'.
    $query = $this->database->select('users', 'u');

    // Sélectionner les champs 'uid', 'name' et 'mail' de la table 'users'.
    $query->fields('u', ['uid', 'name', 'mail']);

    // Exécuter la requête et récupérer tous les résultats sous forme de tableau associatif.
    return $query->execute()->fetchAll();
  }
}

Dans cet exemple, nous avons créé un service personnalisé simple qui récupère tous les utilisateurs de la base de données. Comme nous pouvons le voir, nous avons utilisé l'injection de dépendances pour injecter la connexion à la base de données dans le service.

Étape 3 : Utiliser le service personnalisé

Accéder à votre service personnalisé ne pourrait pas être plus simple. Dans votre module, thème ou un autre service, utilisez la classe \Drupal pour appeler votre service personnalisé, comme ceci :

$sample_service = \Drupal::service('votremodule.sample_service');
$all_users = $sample_service->fetchAllUsers();

Et voilà ! Vous avez créé avec succès un service personnalisé dans Drupal 8+.

Conclusion

Les services Drupal 8+ permettent aux développeurs d'écrire du code propre, réutilisable et bien contenu. En créant des services personnalisés et en utilisant le modèle de conception d'Injection de Dépendances (DI), les développeurs peuvent implémenter efficacement des fonctionnalités modulaires et des améliorations aux projets Drupal.

Avec une meilleure compréhension des services Drupal et quelques exemples de code à portée de main, vous avez maintenant les outils nécessaires pour créer vos propres services personnalisés et améliorer la maintenabilité et la modularité de vos projets Drupal.