Drupal 8 modülü yazın

Druplicon

Uzun bir aradan sonraki ilk makalemde, size çok basit bir Drupal 8 modül yazımını anlatacağım. Bu modül çok basit olacak ve ekrana bir Merhaba Dünya yazacak.

Bildiğiniz gibi, Drupal 8 ile bir sürü şey değişti. Drupal 7'de bir modülün sistemde tanınması için iki dosya gerekliydi; .info dosyası ve .module dosyası. Drupal 8'de ise sadece bir .info.yml dosyası yetiyor. Evet, Drupal 8 ile birlikte gelen değişikliklerden birisi de .yml dosyası kullanımı. Başka bir değişiklik ise şu: Drupal 7'de ayrı bir sayfada ekrana basit bir şey yazdırmayı hook_menu ile yapabiliyorduk, ancak şimdi Drupal 8 ile bir routing.yml dosyası kullanacağız.

Drupal 8'de ayrıca daha önceden kök dizinde bulunan Drupal dosyaları core/ dizini içine alındı. Buna ek olarak Drupal 7'de sites/all/modules altında olan modüller modules/ dizini altına alındı, ayrıca artık katkıda bulunulmuş modüller modules/contrib dizinine kurulurken kendi yazdığımız modüller modules/custom dizininde duruyor. Böyle bir zorunluluk yok elbette, ama Drupal 8'de modül/tema/profil kurulum yöntemi olan composer zaten katkıda bulunulmuş modülleri modules/contrib altına kuruyor. Drupal 8'de gelen değişiklikleri buradan görebilirsiniz.

Uzun bir giriş yazısı oldu, şimdi kolları sıvayalım ve modules/custom altına demo (çok orijinal) bir dizin açalım ve içinde demo.info.yml dosyası oluşturalım, içeriği de şöyle olsun.

name: Drupal 8 demo modülü
description: 'Demo modülü'
type: module
core: 8.x

.info.yml dosyasında gelen bir değişiklik de type anahtarı. module veya theme olması gerekiyor. .info.yml dosyasında olabilecek diğer anahtar|değer çiftleri için buraya bakabilirsiniz.

Şimdi .routing.yml dosyamızı oluşturalım:

demo.demo:
  path: '/demo'
  defaults:
    _controller: '\Drupal\demo\Controller\DemoController::demo'
    _title: 'Demo'
  requirements:
    _permission: 'access content'
 

Burada demo.demo modülün adını ve rotayı gösterir. path: ise oluşturulan sayfanın yolunu gösterir. defaults altındaki _controller: ve _title: sırasıyla sayfada çıktı yapmaktan sorumlu olan kontrolör ve sayfanın başlığını gösteriyor. requirement altındaki permission: ise o sayfayı görüntülemek için kullanıcının hangi izne sahip olması gerektiğini belirtiyor. .routing.yml içinde kullanılabilecek değerlerin tam listesi için buraya bakabilirsiniz.

Şimdi de demo/ sayfamızı oluşturacak olan asıl dosyamızı oluşturalım. Bunun için modül dizinimiz içinde src/Controller altında DemoController.php adında bir dosya oluşturacağız. İçinde de şunun olması gerekiyor:

<?php
/**
 * @file
 * \Drupal\demo\Controller\DemoController class
 */

namespace Drupal\demo\Controller;

use Drupal\Core\Controller\ControllerBase;

/**
 * DemoController.
 */
class DemoController extends ControllerBase {
  /**
   * Örnek bir sayfa oluşturur.
   */
  public function demo() {
    return [
      '#markup' => t('Merhaba Dünya!'),
    ];
  }      
}

Ekrana çok basitçe Merhaba Dünya! yazan bir modül oluşturduk. Son olarak da menüde Demo yazan bir öğe oluşturup modülümüzün oluşturduğu /demo sayfasına gitmesini sağlayalım. Bunun için bir demo.links.menu.yml dosyası oluşturalım. İçeriği şöyle olsun:

demo.demo:
  title: Demo
  description: 'Bu bir demo bağlantısıdır'
  parent: system.admin_structure
  route_name: demo.demo

Şimdilik bu kadar. Önümüzdeki makalelerde görüşmek üzere. Eklemek ya da düzeltmek istediğiniz bir şey mi var? Yorumlarda belirtin.