Drupal 8 - tworzenie modułu podstawy

W artykule przedstawię wstęp do tworzenia modułów w Drupalu 8. Stworzymy prosty moduł tworzący drupalową stronę po stronie frontendu. Tworzenie modułów w Drupalu 8 ma parę istotnych zmian w stosunku do Drupala 7. W Drupalu 7 podstawowe moduły są umieszczane w katalogu /modules, a moduły niestandardowe i dodatkowe należy umieścić w katalogu sites/all/modules lub sites/sitename/modules. W Drupalu 8 podstawowe moduły przechodzą do katalogu /core, więc możesz umieścić swoje moduły dodatkowe i niestandardowe w katalogu /modules.

Utwórz nowy katalog w /sites o nazwie all. Wewnątrz utwórz katalog /modules, a następnie utwórz katalog o nazwie my_module wewnątrz katalogu all. Kolejnym krokiem jest utworzenie pliku info.yaml, aby poinformować Drupala, że Twój moduł istnieje. Utwórz plik my_module.info.yaml w katalogu my_module o następującej treści.
name: My Module
description: My first module
package: Custom
type: module
version: 1.0
core: 8.x
Więcej o plikach info możesz przeczytać na stronie Drupala. W Drupalu 7 plik .module był obowiązkowy, teraz jest opcjonalny. W katalogu modułów musimy stworzyć podkatalog dla kontrolerów, wtyczek, formularzy, szablonów i testów. Ten podkatalog powinien nazywać się src. Pozwoli to klasie kontrolera na automatyczne ładowanie, co oznacza, że nie musisz jawnie dołączać pliku klasy. Teraz stworzymy pierwszy kontroler. Utwórz folder w src o nazwie Controller. W tym folderze utwórz plik o nazwie FirstController.php. W FirstController.php utworzymy prostą wiadomość "hello world" wyświetloną na drupalowej podstronie.
<?php
/**
 * @file
 * Contains \Drupal\my_module\Controller\FirstController.
 */

namespace Drupal\my_module\Controller;

use Drupal\Core\Controller\ControllerBase;

class FirstController extends ControllerBase {
  public function content() {
    return array(
      '#type' => 'markup',
      '#markup' => t('Hello world'),
    );
  }
}
Kontroler, który stworzyliśmy powyżej, na tym etapie nic nie zrobi. Musimy utworzyć routing, aby mógł zostać wykonany. Utwórz plik o nazwie my_module.routing.yml w głównym katalogu naszego modułu o następującej treści.
my_module.content:
  path: '/hello'
  defaults:
    _controller: 'Drupal\my_module\Controller\FirstController::content'
    _title: 'Hello world'
  requirements:
    _permission: 'access content'
Włącz moduł w panelu administracyjnym. Jeśli teraz przejdziesz do /hello, zobaczysz komunikat Hello World. Routing działa i zwraca zawartość z kontrolera. Ale aby dotrzeć do treści, musisz znać adres URL. Aby uczynić to bardziej użytecznym, musimy dodać go do systemu menu Drupala. Aby to zrobić, musisz utworzyć plik menu.yml. Utwórz zatem w głównym katalogu modułu plik my_module.links.menu.yml.
my_module.admin:
  title: 'My module settings'
  description: 'A basic module to return hello world'
  parent: system.admin_config_development
  route_name: my_module.content
  weight: 100
Wyczyść cache, a następnie powinieneś zobaczyć pozycję menu w konfiguracji -> development. Gratulacje stworzyłeś właśnie pierwszy drupalowy moduł!