Grey text "drush". In the background: strings of drupal code.

Ihr eigener Drush-Befehl in Drupal 8

Wenn Sie ein Drupal-Entwickler sind, ist es fast sicher, dass Sie von drush gehört haben. Drush ist ein Kommandozeilen-Tool, das es Ihnen ermöglicht, mit Drupal zu interagieren, nun ja - über die Kommandozeile. Jede Drupal-Agentur oder jeder, der etwas auf sich hält und Drupal-Entwicklung macht, verwendet Drush, weil es die Drupal-Entwicklung massiv beschleunigt und somit Zeit und Geld spart.

Drush kommt mit vielen eingebauten Befehlen, aber Sie können auch Ihre eigenen hinzufügen. Schauen wir uns an, wie.

In Drupal 8 können wir leicht unseren eigenen Befehl zu Drush hinzufügen. Der gesamte Code für den neuen Befehl wird in einem benutzerdefinierten Modul platziert.

Wir müssen nur 2 Dateien erstellen.
Die Struktur sieht folgendermaßen aus.

Die Struktur der Datei als Baum von Katalogen sichtbar

Datei d_drush_command_pack.info.yml

Eine Standarddatei jedes Moduls, in der Informationen über unser Plugin enthalten sind.

name: Droptica Drush Command Pack
description: Nützliche benutzerdefinierte Drush-Befehle bereitstellen
package: Drush-Befehle
type: module
core: 8.x


Datei d_drush_command_pack.drush.inc

Hier definieren wir unsere Befehle und legen unsere Logik fest, die durch einen bestimmten Befehl ausgeführt wird.
Das folgende Beispiel generiert zwei neue Befehle.

<?php

/**
 * Implementiert hook_drush_command().
 */
function d_drush_command_pack_drush_command() {   $commands['rebuild-aggregate-file'] = [
    'description' => 'Aggregerte CSS/JS-Dateien neu erstellen',
    'aliases' => ['raf'],
    'arguments' => [      
      'js' => 'Nur aggregierte JS-Dateien neu erstellen',
      'css' => 'Nur aggregierte CSS-Dateien neu erstellen',
    ],
    'examples' => [       
      'drush raf' => 'Aggregierte CSS/JS-Dateien neu erstellen',
      'drush raf js' => 'Aggregierte JS-Dateien neu erstellen',
      'drush raf css' => 'Aggregierte CSS-Dateien neu erstellen',
    ],
  ];

  $commands['delete-node-alias'] = [
    'description' => 'Einen Node-Alias löschen',
    'aliases' => ['dna'],
    'arguments' => [       
      'source' => 'Nach Quelle löschen',
      'alias' => 'Nach Alias löschen',
    ],
    'options' => [      
        'name' => 'Name der Quelle oder des Alias',
    ],
    'examples' => [       
      'drush dna source /node/1' => 'Einen Alias nach Quellpfad löschen',
      'drush dna alias /path-alias-name' => 'Einen Alias nach Alias-Pfadname löschen',
    ],
  ];

  return $commands;
} /**
 * Drush-Befehlslogik zum Neuaufbau des Datei-Caches.
 *
 */
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('Aggregierte @arg-Dateien neu erstellen.', $tokens));
      break;
    case 'css':
      \Drupal::service("asset.css.collection_optimizer")->deleteAll();
      _drupal_flush_css_js();
      drush_print(dt('Aggregierte @arg-Dateien neu erstellen.', $tokens));
      break;
    case '':
      \Drupal::service("asset.css.collection_optimizer")->deleteAll();
      \Drupal::service("asset.js.collection_optimizer")->deleteAll();
      _drupal_flush_css_js();
      drush_print(dt('Aggregierte JS/CSS-Dateien neu erstellen.'));
      break;
    default:
      drush_print(dt('Falsches Argument. Mögliche Argumente: js, css oder Befehl ohne Argument verwenden.'));
  } }

/**
 * Drush-Befehlslogik zum Löschen von Aliasen
 *
 */
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 gelöscht', $tokens));
      break;

    default:
      drush_print(dt('Falsches Argument und Optionen. Beispielnutzung: drush dna source /node/1'));
  } }

Der obige Code erstellt zwei neue Drush-Befehle für uns
Der erste ist rebuild-aggregate-file
Der zweite ist delete-node-alias
Die Befehle sind im Hook definiert:   hook_drush_command(),
hier setzen wir Alias, Argumente, Optionen und Beispiele für unseren Befehl
Die Logik für jeden von ihnen wird in separaten Funktionen erstellt.
Wir erstellen die Namen der Funktionen so:  
drush_[MODULNAME]_[BEFEHLSNAME]()
Alles, was wir tun müssen, ist, unser neues Modul zu aktivieren, den Cache zu leeren und die Befehle zu testen.
Beispiele für den Start der Befehle aus dem obigen Code.

drush rebuild-aggregate-file css
drush raf js
drush raf

drush dna source /node/1
drush dna alias /alias-name


Sie finden die Dateien des Beispielmoduls auf GitHub.

3. Best practices for software development teams