Rapid Module Development Drupaldelphia, April 27, 2018 Intros Tom - - PowerPoint PPT Presentation

rapid module development
SMART_READER_LITE
LIVE PREVIEW

Rapid Module Development Drupaldelphia, April 27, 2018 Intros Tom - - PowerPoint PPT Presentation

Rapid Module Development Drupaldelphia, April 27, 2018 Intros Tom Mount Eastern Standard Technology Lead, Eastern Standard Philadelphia-based marketing and Closet geek technology agency Hobbies include bass guitar and


slide-1
SLIDE 1

Rapid Module Development

Drupaldelphia, April 27, 2018

slide-2
SLIDE 2

Eastern Standard

  • Philadelphia-based marketing and

technology agency

  • Collaborative dev team
  • We’re hiring!

Intros

Tom Mount

  • Technology Lead, Eastern Standard
  • Closet geek
  • Hobbies include bass guitar and rec

football year-round

  • Email: tomm@easternstandard.com
  • Drupal: https://www.drupal.org/u/tmountjr
slide-3
SLIDE 3

Cliche alert: “Work smarter, not harder.”

slide-4
SLIDE 4

The Not-So-Rapid Setup

slide-5
SLIDE 5

Tools: What you probably already have

  • A CLI/terminal/command prompt
  • A Drupal 8 project, one that’s either set up somewhere already, or at least the zipped version of Drupal Core 8.5.72.
slide-6
SLIDE 6

Tools: What you should download

  • VSCode (https://code.visualstudio.com/), available for Windows, OS X, and Linux (.rpm and .deb), along with some

plugins:

  • PHP Debug (https://github.com/felixfbecker/vscode-php-debug)
  • EditorConfig (https://github.com/editorconfig/editorconfig-vscode)
  • PHP DocBlocker (https://github.com/neild3r/vscode-php-docblocker)
  • PHP CS (https://github.com/ikappas/vscode-phpcs)
  • PHP CS Fixer (https://github.com/junstyle/vscode-php-cs-fixer)
  • Drupal Console (https://drupalconsole.com/)
  • Docker (https://www.docker.com/)
  • Lando (https://docs.devwithlando.io/)

Note that the only plugin we’ll definitely be using here is PHP Debug. The others are nice to have and help you write beautiful and standards-compliant code quickly, but it probably won’t speed up your actual code writing.

slide-7
SLIDE 7

Chances are good you already have these installed and running. But in case you don’t:

  • Git
  • Composer
  • Drush (https://www.drush.org/)
  • Drush 8 may already be installed globally (http://docs.drush.org/en/8.x/install/)
  • Drush 9 may already be installed in the project and can be accessed with Drush Launcher

(https://github.com/drush-ops/drush-launcher)

Tools: What you might need to download, but probably not.

slide-8
SLIDE 8

Tools: The One-Time Setup

To follow along, you’ll need to do the following:

  • Install VSCode and all the extensions.
  • Install Docker.
  • Install Lando.
  • Install Drupal Console Launcher.
slide-9
SLIDE 9

Now can we get to developing?

(It’s been like two hours already!)

slide-10
SLIDE 10

Your Module: What will it do?

Having a clear idea of what you want to accomplish with your custom module will save you time later. The Drupal module ecosystem is pretty big; maybe someone has already done what you want to do? Spending 30 minutes poking around https://drupal.org is definitely faster than spending six hours writing a custom module that someone else has already written. Efficiency isn’t necessarily about doing things quickly, it’s about being smart in your approach.

slide-11
SLIDE 11

Your Module: What will it do?

Let’s create a very custom module:

  • Should store its configuration the way other modules store Drupal configuration.
  • Should include a form to edit those config values.
  • Should include a menu link to that form.
  • Should include some level of permission control that site owners can set if they so desire.

In most cases, your custom module will have a lot more functionality, but this is fine for the purposes of a demo.

slide-12
SLIDE 12

Step 0: Set up a new/existing local Drupal site.

slide-13
SLIDE 13

Set up a new/existing local Drupal site

slide-14
SLIDE 14

Set up a new/existing local Drupal site

slide-15
SLIDE 15

Step 1: Create your module.

slide-16
SLIDE 16

Create your module

slide-17
SLIDE 17

(Optional) Step 1.5: Move the module.

slide-18
SLIDE 18

Move the module

slide-19
SLIDE 19

Step 2: Enable the module.

slide-20
SLIDE 20

Enable the module

slide-21
SLIDE 21

Step 3: Generate a config file and form.

slide-22
SLIDE 22

Generate a config file and form

slide-23
SLIDE 23

Generate a config file and form

slide-24
SLIDE 24

Step 4: Verify config is being saved.

slide-25
SLIDE 25

Verify config is being saved

slide-26
SLIDE 26

The end! …?

slide-27
SLIDE 27

Where to go from here

We could stop here. We have a config form, and several hundred lines of code that we didn’t have to write that handle routing, configuration, and menus. But the form asks for an API URL. And it happily accepts “hello world.” Let’s fix that.

slide-28
SLIDE 28

Step 5: Add validation.

slide-29
SLIDE 29

Validation, part 1: making sure XDebug works

XDebug is a fantastic PHP debugger. You can step through your code line by line, jump in and out of methods, get detailed stack traces, set conditional breakpoints...everything you need to inspect what’s happening in your module under the surface. It’s fairly easy to set up in VSCode.

slide-30
SLIDE 30

Validation, part 1: making sure XDebug works

slide-31
SLIDE 31

Validation, part 1: making sure XDebug works

slide-32
SLIDE 32

Validation, part 1: making sure XDebug works

slide-33
SLIDE 33

Validation, part 1: making sure XDebug works

slide-34
SLIDE 34

Validation, part 2: figuring out how to validate

Back in the day, everyone had their own regular expression for URLs, email addresses, etc. They all had problems. Luckily, a quick Google search (“drupal 8 valid url”) landed me on the UrlHelper::isValid() documentation page. The method looks easy enough to figure out how it works, but let’s test it anyway with another great tool: the Drupal PHP REPL.

slide-35
SLIDE 35

Validation, part 2: figuring out how to validate

slide-36
SLIDE 36

Validation, part 3: actually validating

slide-37
SLIDE 37

Validation, part 3: actually validating

slide-38
SLIDE 38

Step 6: Add permissions.

slide-39
SLIDE 39

Add permissions

slide-40
SLIDE 40

Add permissions

slide-41
SLIDE 41

Add permissions

slide-42
SLIDE 42

Add permissions

slide-43
SLIDE 43

Test permissions

slide-44
SLIDE 44

Test permissions

slide-45
SLIDE 45

Test permissions

slide-46
SLIDE 46

Test permissions

slide-47
SLIDE 47

Recap

slide-48
SLIDE 48

How is this faster? Instead of…

...setting up on Pantheon or Acquia, committing code, testing, committing more code, doing more testing...

...we can…

...use Lando as a local development environment.

slide-49
SLIDE 49

How is this faster? Instead of…

...reading the Form API and menu docs and writing a few hundred lines of code by hand, then reading a bunch of blogs about how to set up new configuration files and writing a few dozen more lines of code by hand...

...we can…

...use the Drupal Console to generate a brand new module, set up a new config file, create a configuration editing form, and set up permissions.

slide-50
SLIDE 50

How is this faster? Instead of…

...clicking around in the admin interface for a while to create roles and a new user...

...we can…

...use the Drupal Console to stub out a new user role and a new user, right from the command line.

slide-51
SLIDE 51

How is this faster? Instead of…

...choosing a password, writing it down or putting it in a password manager, and cluttering up your brain...

...we can…

...use Drush and a private browsing window to log in as that new user without worrying what the password was.

slide-52
SLIDE 52

How is this faster? Instead of…

...dropping a bunch of var_dump(); die(); statements everywhere, or, if you want to get really elegant, installing the debug module and using kint() everywhere, both of which require reloading the page every time you change anything… (What you’re looking for wasn’t in the variable you kint()ed? Guess you gotta reload and try again!)

...we can…

...use a free and powerful IDE, along with a proper debugging tool, to quickly inspect variables while our code was running, letting us get some insight into Drupal was doing “under the hood.”

slide-53
SLIDE 53

How is this faster? Instead of…

...doing something silly like making a custom route that exists solely to run one statement and print the output to the screen (which I’ve done) or blindly hammering away at a method until you find the right variable to pass...

...we can…

...use Drush’s PHP REPL to quickly test out some inputs against a Drupal utility method without having to guess or go the long way around.

slide-54
SLIDE 54

Further Reading

slide-55
SLIDE 55

Further Reading

  • XDebug: https://deliciousbrains.com/xdebug-advanced-php-debugging/
  • Docksal, similar to Lando, might be easier if you already know Docker pretty well: https://docksal.io/
  • All the Drupal Console commands: https://docs.drupalconsole.com/en/commands/available-commands.html
  • All the Drush 8 commands: https://drushcommands.com/
slide-56
SLIDE 56

Conclusion

slide-57
SLIDE 57

Questions

slide-58
SLIDE 58