
Votre propre commande Drush dans Drupal 8
Si vous êtes un développeur Drupal, il est presque certain que vous avez entendu parler de drush. Drush est un utilitaire en ligne de commande qui vous permet d'interagir avec Drupal, eh bien - à partir de la ligne de commande. Chaque agence Drupal ou quiconque digne de ce nom qui fait du développement Drupal utilise drush car il accélère considérablement le développement Drupal, économisant ainsi temps et argent.
Drush est livré avec de nombreuses commandes intégrées, mais vous pouvez également ajouter les vôtres. Voyons comment.
Dans Drupal 8, nous pouvons facilement ajouter notre propre commande à Drush. Tout le code pour la nouvelle commande sera placé dans un module personnalisé.
Nous devons créer seulement 2 fichiers.
La structure est la suivante.
Fichier d_drush_command_pack.info.yml
Un fichier standard de chaque module dans lequel il y a des informations sur notre plugin.
name: Droptica Drush Command Pack
description: Fournir des commandes drush personnalisées utiles
package: Drush Commands
type: module
core: 8.x
Fichier d_drush_command_pack.drush.inc
Ici, nous définissons nos commandes et nous mettons notre logique qui sera exécutée par une commande donnée.
L'exemple suivant génère deux nouvelles commandes.
<?php
/** * Implémente hook_drush_command(). */
function d_drush_command_pack_drush_command() { $commands['rebuild-aggregate-file'] = [
'description' => 'Reconstruire les fichiers agrégés css/js',
'aliases' => ['raf'],
'arguments' => [
'js' => 'Reconstruire uniquement les fichiers agrégés js',
'css' => 'Reconstruire uniquement les fichiers agrégés css',
],
'examples' => [
'drush raf' => 'Reconstruire les fichiers agrégés css/js',
'drush raf js' => 'Reconstruire les fichiers agrégés js',
'drush raf css' => 'Reconstruire les fichiers agrégés css',
],
];
$commands['delete-node-alias'] = [
'description' => 'Supprimer un alias de nœud',
'aliases' => ['dna'],
'arguments' => [
'source' => 'Supprimer par source',
'alias' => 'Supprimer par alias',
],
'options' => [
'name' => 'Nom de la source ou de l'alias',
],
'examples' => [
'drush dna source /node/1' => 'Supprimer un alias par chemin source',
'drush dna alias /path-alias-name' => 'Supprimer un alias par nom de chemin d'alias',
],
];
return $commands;
} /**
* Logique de la commande Drush pour reconstruire le cache des fichiers.
*
*/
function drush_d_drush_command_pack_rebuild_aggregate_file($arg = NULL) { $tokens = ['@arg' => $arg];
switch ($arg) { case 'js':
\Drupal::service("asset.js.collection_optimizer")->deleteAll();
_drupal_flush_css_js();
drush_print(dt('Reconstruction des fichiers @arg agrégés.', $tokens));
break;
case 'css':
\Drupal::service("asset.css.collection_optimizer")->deleteAll();
_drupal_flush_css_js();
drush_print(dt('Reconstruction des fichiers @arg agrégés.', $tokens));
break;
case '':
\Drupal::service("asset.css.collection_optimizer")->deleteAll();
\Drupal::service("asset.js.collection_optimizer")->deleteAll();
_drupal_flush_css_js();
drush_print(dt('Reconstruction des fichiers agrégés js/css.'));
break;
default:
drush_print(dt('Argument incorrect. Arguments possibles : js, css ou utilisez la commande sans argument.'));
} }
/**
* Logique de la commande Drush pour la suppression des alias
*
*/
function drush_d_drush_command_pack_delete_node_alias($arg = NULL, $opt = NULL) { $tokens = ['@arg' => $arg, '@opt' => $opt];
switch ($arg) { case 'alias':
case 'source':
$condition = [$arg => $opt];
\Drupal::service('path.alias_storage')
->delete($condition);
drush_print(dt('Alias @opt supprimé', $tokens));
break;
default:
drush_print(dt('Argument et options incorrects. Exemple d'utilisation : drush dna source /node/1'));
} }
Le code ci-dessus crée deux nouvelles commandes drush pour nous
La première est rebuild-aggregate-file
La seconde est delete-node-alias
Les commandes sont définies dans le hook : hook_drush_command(),
ici, nous définissons alias, arguments, options et exemples pour notre commande
La logique pour chacune d'elles est créée dans des fonctions séparées.
Nous créons les noms des fonctions comme ceci :
drush_[MODULE_NAME]_[COMMAND_NAME]()
Tout ce que nous avons à faire est d'activer notre nouveau module, de vider le cache et de tester les commandes.
Exemples de lancement des commandes à partir du code ci-dessus.
drush rebuild-aggregate-file css
drush raf js
drush raf
drush dna source /node/1
drush dna alias /alias-name