Drupal 8 is has many advanced CMS features with using the most advanced features of PHP language and integrates number of third party libraries. Drupal 8 makes use of OOP concepts heavily while using PHP classes, objects, namespaces and many design patterns using these. Symfony is a PHP framework that Drupal borrows from in order to reduce code duplication across various PHP projects. Much of the code that Drupal 8 uses to handle routing, sessions and the services container, amongst other things, is borrowed from Symfony. Drupal 8 makes use of PHP annotations — @docblock comments added to your code using a special syntax — for plugin discovery and to provide additional context/meta-data for code that’s being executed.
Let us create our first module in Drupal 8 using the following steps.
- Create folder with module machine name in the sites/all/modules directory or modules/custom directory. I’m creating a hello_world module , I created it in the modules/custom directory.
- Let Drupal 8 know about your module with an .info.yml file. I have created hello_world.info.yml file. Following are its contents.
name: Hellow World Module description: Creates module to display Hellow WOrld on a page core: 8.x package: custom type: module version: 1.0 php: 5.6
We should add the name and description. Also need to define core and type. Also it needs to define the version and optionally minimum php version needed too.
- Let Drupal 8 know the paths by .routing.yml file. It maps the path and and code that gets executed when that path is accessed.
hello_world.hello: path: '/hello' defaults: _controller: Drupal\hello_world\Controller\HelloController::hello _title: 'This is title from router' requirements: _permission: 'access content'
- Next we need to add the controller class which has the code that is executed when the path is accessed.
<?php namespace Drupal\hello_world\Controller; use Drupal\Core\Controller\ControllerBase; class HelloController extends ControllerBase { public function content() { return [ "#type" => 'markup', '#markup' => $this->t("This is a content added") ]; } public function hello() { return [ '#type' => 'markup', '#markup' => 'This is another content to hello' ]; } }
- After writing above code and if you visit your modules page in Drupal 8 , you’ll see your module listed. Enable the module and visit /hello you’ll see the output as defined by the controller.
This is the simple way that can be used to create a module in Drupal 8.
Leave a Reply