logo

Extra Block Types (EBT) - Nieuwe Layout Builder ervaring❗

Extra Block Types (EBT) - gestileerde, aanpasbare bloktypes: Slideshows, Tabs, Cards, Accordions en vele andere. Ingebouwde instellingen voor achtergrond, DOM Box, javascript-plugins. Ervaar vandaag al de toekomst van layout building.

Demo EBT-modules Download EBT-modules

❗Extra Paragraph Types (EPT) - Nieuwe Paragraphs ervaring

Extra Paragraph Types (EPT) - analoge op paragrafen gebaseerde set modules.

Demo EPT-modules Download EPT-modules

Scroll

12.15.5. Dependency injection in een custom klasse/service

29/09/2025, by Ivan

Menu

In de vorige artikelen hebben we besproken wat Services en Dependency Injection (DI) zijn en hoe je ze kunt gebruiken in je controller, block en formulier:

12.15. Services en Dependency Injection.
12.15.1. Dependency Injection in de controller
12.15.2. Dependency Injection in een block
12.15.3. Dependency Injection in BaseForm
12.15.4. Dependency Injection in de configuratievorm ConfigFormBase

In dit artikel een voorbeeld van hoe je services via DI toevoegt in een custom klasse/service. Laten we dit bekijken aan de hand van het Book-module:

/core/modules/book/book.services.yml:

services:
  book.manager:
    class: Drupal\book\BookManager
    arguments: ['@entity.manager', '@string_translation', '@config.factory', '@book.outline_storage', '@renderer']

In arguments geven we aan welke objecten we uit de Service container willen ophalen, daarom hoeven we geen create()-methode toe te voegen in onze klasse.

/core/modules/book/src/BookManager.php:

<?php

namespace Drupal\book;

use Drupal\Core\Entity\EntityManagerInterface;
use Drupal\Core\Render\RendererInterface;
use Drupal\Core\StringTranslation\TranslationInterface;
use Drupal\Core\Config\ConfigFactoryInterface;
...

/**
 * Definieert een book manager.
 */
class BookManager implements BookManagerInterface {

  /**
   * Entity manager Service Object.
   *
   * @var \Drupal\Core\Entity\EntityManagerInterface
   */
  protected $entityManager;

  /**
   * Config Factory Service Object.
   *
   * @var \Drupal\Core\Config\ConfigFactoryInterface
   */
  protected $configFactory;

  /**
   * Boeken array.
   *
   * @var array
   */
  protected $books;

  /**
   * Book outline storage.
   *
   * @var \Drupal\book\BookOutlineStorageInterface
   */
  protected $bookOutlineStorage;

  /**
   * Slaat platte book trees op.
   *
   * @var array
   */
  protected $bookTreeFlattened;

  /**
   * De renderer.
   *
   * @var \Drupal\Core\Render\RendererInterface
   */
  protected $renderer;

  /**
   * Construeert een BookManager object.
   */
  public function __construct(EntityManagerInterface $entity_manager, TranslationInterface $translation, ConfigFactoryInterface $config_factory, BookOutlineStorageInterface $book_outline_storage, RendererInterface $renderer) {
    $this->entityManager = $entity_manager;
    $this->stringTranslation = $translation;
    $this->configFactory = $config_factory;
    $this->bookOutlineStorage = $book_outline_storage;
    $this->renderer = $renderer;
  }

  ...

}

Ik heb de code die niet gerelateerd is aan DI verwijderd uit het voorbeeld, zodat het makkelijker is te bekijken wat er toegevoegd moet worden aan een custom klasse. Voor de rest gebeurt het toevoegen van services op dezelfde manier als in een controller.