Voici les différences entre un module « hello world » le plus simple possible, entre Drupal 7 (code source) et Drupal 8 (code source).
Drupal 7 | Drupal 8 |
hello.info | hello.info.yml |
name = Hello world description = Minimanlist Hello World in Drupal 7 package = helloworld core = 7.x files[] = hello.module |
name: Hello World module type: module description: An Hello World module showing D8 capabilites package: Example modules core: 8.x |
hello.module | hello.module |
<?php function hello_menu() { $items = array( 'hello_world' => array( 'title' => 'Hello world', 'page callback' => '_page_hello_world', 'access callback' => TRUE, ), ); return $items; } function _page_hello_world() { return array( '#markup' => '<p>Hello world page text (from module) !</p>' ); } |
<?php function hello_menu() { $items['hello'] = array( 'title' => 'Hello Page', 'route_name' => 'hello.world', ); return $items; } |
hello.routing.yml | |
# hello.routing.yml hello.world: path: 'helloworld' defaults: _content: '\Drupal\hello\HelloRouteController::index' requirements: _permission: 'access content' |
|
/lib/Drupal/hello/HelloRouteController.php | |
<?php namespace Drupal\hello; class HelloRouteController { public function index() { return array('#markup' => 'Hello workd page text (from controller) !'); } } |
Comme on peut le voir, le .info est convertit en fichier YAML .info.yml. Pas de grosses différences à ce stade.
Par contre le .module est éclaté en 3 parties. Le hook_menu persiste mais est scindé en 2. Le routing se fait maintenant dans un fichier .routing.yml. Il ne reste plus que la définition du titre du menu dans le module. La callback est quand à elle transformée en controller. En effet, le système de menu de Drupal 7 est remplacé par le routing Symfony2. C’est plus compliqué à écrire, mais c’est aussi plus puissant.