Generators jump start your coding by building all the boring boilerplate code for you. After running a drush generate [foo] 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 interact() method. Typically this class is placed in 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 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, its better to use modules to carry your generators. If you still prefer using a global generator, please note:

  1. The file's namespace should be \Drush\Generators.
  2. The filename must be have a name like Generators/FooGenerator.php
    1. The prefix Foo can be whatever string you want. The file must end in Generator.php
    2. The enclosing directory must be named Generators
  3. 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.