A blog by Ian Wright - Front-end web developer
To create my Drupal 8 module I setup the required files & folder structure. In Drupal 7 you would require a .info & .module file. Now in Drupal 8 the only required file is the .info equivalent modulename.info.yml which contains similar information about the module. All modules which are install in Drupal 8 go into the following location /modules/, for my module I used the following file structure /modules/custom/geoplotting.
Within this directory I created the only required file geoplotting.info.yml
name: Geoplotting description: Provides a google map formatter for geofield. configure: geoplotting.config type: module package: Field types core: 8.x dependencies: - geofield
If you are a Drupal 7 developer you will recognise a few of the keys (name, description, package, core & dependencies), now in Drupal 8 you have to add type, the reason for this is because theme files also use YAML files.
As part of my .info.yml file I added a configure key, this is my modules configuration page. Drupal 8 now uses Symfony2 as part of core, because of this, hook_menu() is no longer required to define paths but Symfony2 routing component is used. This involves defining the routes as configuration (inside a YAML file) and handling the callback in a controller class.
From my modules root I created the following file geoplotting.routing.yml
geoplotting.config: path: '/admin/config/geoplotting/config' defaults: _form: 'Drupal\geoplotting\Form\GeoplottingConfig' _title: 'Geoplotting' requirements: _permission: 'administer geoplotting config'
I’ve created a new route config for my module geoplotting (the first is the module name and the second the route name). For the path I set the path I want this route to register (accessible URL). Under defaults, I have two settings: the default page title (_title) and the form config (_form) which references our GeoplottingConfig class. Under requirements, I’ve specify a custom permission administer geoplotting config which is required to access the settings page.
For my module, I wanted to allow site owner to set who can access the settings page (Google API key & also What3words API – more on this later) because of this I created a customer permission.
From my modules root I created the following file geoplotting.permissions.yml
administer geoplotting config: title: 'Administer configuration' description: 'Allows users to set API keys and global geoplotting settings' restrict access: TRUE
This is just the start of how I’ve created my custom module during 10% time at miggle – next time I will talk about my modules configuration & help pages.