Drupal Console

Drupal Console is a new shiny thing in Drupal - a Command Line Interface (CLI) built for Drupal 8, similar to Drush, used to do tasks like rebuild caches, install modules, and generate boilerplate code for module development. It's the latter that I'm focusing on at the moment while I learn Drupal 8.

Create a custom module

So to create my first generated module I need to do the following command:

drupal generate:module

This takes me through a few questions to answer before generating the files and then I'm left with my new module folder and the files:

  • module_name.info.yml
  • module_name.module

Next I need to install the module with the command:

drupal module:install module_name

Create a custom page

Drupal 8 uses routes and controllers to display custom pages. That means you need to have a routing.yml file that handles routing (this replaces hook_menu() used in Drupal 7), and a controller class that handles the code to display the page (this replaces the page callback function used in Drupal 7). The controller class uses the PSR-4 naming standard so it needs to be inside a specific directory structure. Drupal Console handles all of this for us automagically. So to create a 'hello' page we do the command:

drupal generate:controller

Again I'm asked a series of questions:

Enter the module name: module_name
Enter the Controller class name: HelloController
Enter the Controller method title (leave empty and press enter when done): Hello Controller
Enter the action method name: hello
Enter the route path: /hello
Enter the Controller method title (leave empty and press enter when done): (empty)
Do you want to generate a unit test class (yes/no): no
Do you want to load services from the container (yes/no): no
Do you confirm generation? (yes/no): yes

And in my module I can now see the module_name.routing.yml file with the controller class generated in the correct directory structure


Although I'm just scratching the surface of Drupal Console, I can already see that this is going to save me a lot of time when developing in Drupal 8.

Note: Sometimes I'd have a problem using Drupal Console and get the error Call to undefined method escapeTrailingBackslash(). The fix is here.

Drupal Console Commands

Drupal Console Command Details
about Display basic information about Drupal Console project
chain Chain command execution
check System requirement checker
help Displays help for a command
init Copy configuration files to user home directory.
list Lists all available commands
self-update Update project to the latest version.
server Runs PHP built-in web server
breakpoints:debug Displays breakpoints available in application
cache:context:debug Displays current cache context for the application.
cache:rebuild Rebuild and clear all site caches.
chain:debug List available chain files.
config:debug Show the current configuration.
config:delete Delete configuration
config:diff Ouput configuration items that are different in active configuration compared with a directory.
config:edit Edit the selected configuration.
config:export Export current application configuration.
config:export:content:type Export a specific content type and their fields.
config:export:view Export a view in YAML format inside a provided module to reuse in other website.
config:import Import configuration to current application.
config:import:single Import the selected configuration.
config:override Override config value in active configuration.
config:settings:debug Displays current key:value on settings file.
container:debug Displays current services for an application.
create:comments Create dummy comments for your Drupal 8 application.
create:nodes Create dummy nodes for your Drupal 8 application.
create:terms Create dummy terms for your Drupal 8 application.
create:users Create dummy users for your Drupal 8 application.
create:vocabularies Create dummy vocabularies for your Drupal 8 application.
cron:debug List of modules implementing a cron
cron:execute Execute cron implementations by module or execute all crons
cron:release Release cron system lock to run cron again
database:client Launch a DB client if it's available
database:connect Shows DB connection
database:drop Drop all tables in a given database.
database:dump Dump structure and contents of a database
database:log:clear Remove events from DBLog table, filters are available
database:log:debug Display current log events for the application
database:restore Restore structure and contents of a database.
database:table:debug Show all tables in a given database.
devel:dumper Change the devel dumper plugin
event:debug Display current events
generate:authentication:provider Generate an Authentication Provider
generate:breakpoint Generate breakpoint
generate:command Generate commands for the console.
generate:controller Generate & Register a controller
generate:doc:cheatsheet Generate a printable cheatsheet for Commands
generate:doc:dash Generate the DrupalConsole.docset package for Dash
generate:doc:data Generate documentations for Commands.
generate:doc:gitbook Generate documentations for Commands
generate:entity:bundle Generate a new content type (node / entity bundle)
generate:entity:config Generate a new config entity
generate:entity:content Generate a new content entity
generate:event:subscriber Generate an event subscriber
generate:form Generate a new "FormBase"
generate:form:alter Generate an implementation of hook_form_alter() or hook_form_FORM_ID_alter
generate:form:config Generate a new "ConfigFormBase"
generate:help Generate an implementation of hook_help()
generate:module Generate a module.
generate:module:file Generate a .module file
generate:permissions Generate module permissions
generate:plugin:block Generate a plugin block
generate:plugin:ckeditorbutton Generate CKEditor button plugin.
generate:plugin:condition Generate a plugin condition.
generate:plugin:field Generate field type, widget and formatter plugins.
generate:plugin:fieldformatter Generate field formatter plugin.
generate:plugin:fieldtype Generate field type plugin.
generate:plugin:fieldwidget Generate field widget plugin.
generate:plugin:imageeffect Generate image effect plugin.
generate:plugin:imageformatter Generate image formatter plugin.
generate:plugin:mail Generate a plugin mail
generate:plugin:rest:resource Generate plugin rest resource
generate:plugin:rulesaction Generate a plugin rule action
generate:plugin:skeleton Generate an implementation of a skeleton plugin for those plugins Drupal Console do not have a specific generator
generate:plugin:type:annotation Generate a plugin type with annotation discovery
generate:plugin:type:yaml Generate a plugin type with Yaml discovery
generate:plugin:views:field Generate a custom plugin view field.
generate:post:update commands.generate.post:update.description
generate:profile Generate a profile.
generate:routesubscriber Generate a RouteSubscriber
generate:service Generate service
generate:theme Generate a theme.
generate:twig:extension Generate a Twig extension.
generate:update Generate an implementation of hook_update_N()
image:styles:debug List image styles on the site
image:styles:flush Execute flush function by image style or execute all flush images styles
libraries:debug Displays libraries available in application
locale:language:add Add a language to be supported by your site
locale:language:delete Delete a language to be supported by your site
locale:translation:status List available translation updates
migrate:debug Display current migration available for the application
migrate:execute Execute a migration available for application
module:debug Display current modules available for application
module:download Download module or modules in application
module:install Install module or modules in the application
module:path Returns the relative path to the module (or absolute path)
module:uninstall Uninstall module or modules in the application
module:update Update core, module or modules in the application
multisite:debug List all multisites available in system
multisite:new Sets up the files for a new multisite install.
node:access:rebuild Rebuild node access permissions. Rebuilding will remove all privileges to content and replace them with permissions based on the current modules and settings.
plugin:debug Display all plugin types, plugin instances of a specific type, or the definition for a specific plugin.
queue:debug Display the queues of your application
queue:run Process the selected queue.
rest:debug Display current rest resource for the application
rest:disable Disable a rest resource for the application
rest:enable Enable a rest resource for the application
router:debug Displays current routes for the application
router:rebuild Rebuild routes for the application
settings:debug List user Drupal Console settings.
settings:set Change a specific setting value in DrupalConsole config file
site:debug List all known local and remote sites.
site:import:local Import/Configure an existing local Drupal project
site:install Install a Drupal project
site:maintenance Switch site into maintenance mode
site:mode Switch system performance configuration
site:new Create a new Drupal project
site:statistics Show the current statistics of website.
site:status View current Drupal Installation status
state:debug Show the current State keys.
state:delete Delete State
state:override Override a State key.
test:debug List Test Units available for the application.
test:run Run Test unit from tests available for application
theme:debug Displays current themes for the application
theme:download Download theme in application
theme:install Install theme or themes in the application
theme:path Returns the relative path to the theme (or absolute path)
theme:uninstall Uninstall theme or themes in the application
translation:cleanup Clean up translation files
translation:pending Determine pending translation string in a language or a specific file in a language
translation:stats Generate translate stats
translation:sync Sync translation files
update:debug Display current updates available for the application
update:entities Applying Entity Updates
update:execute Execute a specific Update N function in a module, or execute all
user:debug Displays current users for the application
user:delete Delete users for the application
user:login:clear:attempts Clear failed login attempts for an account.
user:login:url Returns a one-time user login url.
user:password:hash Generate a hash from a plaintext password.
user:password:reset Reset password for a specific user.
user:role Adds/removes a role for a given user
views:debug Display current views resources for the application
views:disable Disable a View
views:enable Enable a View
views:plugins:debug Display current views plugins for the application
yaml:diff Compare two YAML files in order to find differences between them.
yaml:merge Merge two or more YAML files in a new YAML file. Latest values are preserved.
yaml:split Split a YAML file using indent as separator criteria
yaml:update:key Replace a YAML key in a YAML file.
yaml:update:value Update a value for a specific key in a YAML file.