
Créer des commandes personnalisées Drush 9 dans Drupal 8
Dans Drupal 8.4.X et les versions ultérieures, Drush 9 est la seule version prise en charge et recommandée . L'une des principales modifications introduites dans cette version est un nouveau modèle pour écrire des commandes Drush personnalisées. Désormais, les fichiers .inc sont obsolètes et vous ne les utiliserez plus pour vos commandes, qui sont maintenant des classes basées sur le format AnnotatedCommand.
La structure sous-jacente d'un module contenant votre commande Drush personnalisée ressemblera à ceci :
Fichier Drush9_custom_commands.info.yml
Fichier d'informations par défaut avec les informations de base pour le module.
name: Drush 9 Custom Commands
description: Exemple de commande Drush 9 personnalisée.
core: 8.x
type: module
package: Examples
Fichier Drush.services.yml
L'utilisation du fichier standard services.yml ne fonctionnera plus, et cela entraînera une erreur puisque Drush vous demande maintenant d'utiliser un fichier drush.services.yml séparé avec des définitions de services pour vos commandes Drush personnalisées.
services:
drush9_custom_commands.commands:
class: \Drupal\drush9_custom_commands\Commands\Drush9CustomCommands
tags:
- { name: drush.command }
Fichier Drush9CustomCommands.php
En tant que tel, c’est le fichier le plus crucial, incluant la définition complète de vos commandes.
<?php
namespace Drupal\drush9_custom_commands\Commands;
use Drush\Commands\DrushCommands;
/**
* Un fichier de commande drush.
*
* @package Drupal\drush9_custom_commands\Commands
*/
class Drush9CustomCommands extends DrushCommands {
/**
* Commande Drush qui affiche le texte donné.
*
* @param string $text
* Argument avec message à afficher.
* @command drush9_custom_commands:message
* @aliases d9-message d9-msg
* @option uppercase
* Mettre le message en majuscules.
* @option reverse
* Inverser le message.
* @usage drush9_custom_commands:message --uppercase --reverse drupal8
*/
public function message($text = 'Hello world!', $options = ['uppercase' => FALSE, 'reverse' => FALSE]) {
if ($options['uppercase']) {
$text = strtoupper($text);
}
if ($options['reverse']) {
$text = strrev($text);
}
$this->output()->writeln($text);
}
}
Votre classe de commandes hérite de DrushCommands, et vous pouvez l'utiliser pour inclure de nombreuses commandes, qui sont toutes des méthodes distinctes utilisant des annotations.
Certaines des annotations disponibles pour utilisation incluent :
@command – définition de commande, qui doit suivre la structure module: commande;
@aliases – alias pour vos commandes, séparés par des espaces;
@param – qui définit les paramètres d'entrée pour votre commande;
@option – qui définit les options disponibles pour vos commandes, et qui devrait être placé dans un tableau associatif, où le nom de l'option est la clé;
@usage – exemple montrant comment la commande doit être utilisée.
Exemples d'utilisation de la commande ci-dessus :
Drush d9-message
Hello world!
drush d9-message --uppercase --reverse drupal8
8LAPURD
Conclusions
Dans notre agence Drupal, nous sommes convaincus que ceux qui ont écrit leurs commandes Drush personnalisées avant la sortie de Drush 9 peuvent remarquer un certain nombre de différences ici, car nous assistons à un passage de l’ancienne méthode, bien connue des développeurs Drupal 7, vers la nouvelle solution basée sur Symphony. Ceux qui n'ont pas encore eu l'occasion de travailler avec des commandes Drush trouveront probablement l'exemple ci-dessus assez ennuyeux. À quoi peut servir concrètement votre commande Drush personnalisée? Par exemple, récemment, j'ai eu l'opportunité d'intégrer Drupal avec un service de blog externe. En utilisant cron, les articles sont ajoutés à Drupal à des intervalles spécifiés. Grâce à une commande Drush personnalisée, je peux exécuter une telle opération à tout moment sans utiliser l'interface utilisateur. De plus, le paramètre permet à son utilisateur de télécharger un nombre quelconque d'articles en utilisant une valeur numérique ou le paramètre "tout". La solution ci-dessus s'est avérée très utile lors de la migration initiale, lorsque tous les articles et entrées existants devaient être téléchargés. Quels types de processus allez-vous simplifier grâce aux commandes Drush personnalisées ?