Skip to content

Overview

Generators jump start your coding by building all the boring boilerplate code for you. After running the generate command, you have a guide for where to insert your custom logic.

Drush's generators reuse classes provided by the excellent Drupal Code Generator project. See its Commands directory for inspiration.

Writing Custom Generators

Drupal modules may supply their own Generators, just like they can supply Commands.

See Woot module, which Drush uses for testing. Specifically,

  1. Write a class similar to ExampleGenerator. Implement your custom logic in the generate() method. Typically this class is placed under the src/Generators directory.
  2. Add a .twig file to the same directory. This template specifies what gets output from the generator.
  3. Add your class to your module's drush.services.yml file (example). Use the tag drush.generator.v2 instead of drush.command.
  4. Perform a drush cache:rebuild to compile your drush.services.yml changes into the Drupal container.

Global Generators

Generators that don't ship inside Drupal modules are called global generators. In general, it is better to use modules to carry your generators. If you still prefer using a global generator, please note:

  1. The generator class should be PSR4 auto-loadable.
  2. The generator class namespace, relative to base namespace, should be Drush\Generators. For instance, if a Drush generator provider third party library maps this PSR4 autoload entry:
    "autoload": {
      "psr-4": {
        "My\\Custom\\Library\\": "src"
      }
    }
    
    then the Drush global generator class namespace should be My\Custom\Library\Drush\Generators and the class file should be located under the src/Drush/Generators directory.
  3. The global generator namespace should start with \Drush\Generators but this might be subject to change in the following release.
  4. The filename must have a name like FooGenerator.php. The prefix Foo can be whatever string you want. The file must end in Generator.php
  5. When the namespace starts with \Drush\Generators, the directory above Generators must be one of:
    1. A Folder listed in the --include option. include may be provided via config or via CLI.
    2. ../drush, /drush or /sites/all/drush. These paths are relative to Drupal root.

Last update: October 5, 2022