logo

Dodatni tipovi blokova (EBT) - Novo iskustvo rada sa Layout Builder-om❗

Dodatni tipovi blokova (EBT) – stilizovani, prilagodljivi tipovi blokova: slajdšouvi, kartice sa tabovima, kartice, akordeoni i mnogi drugi. Ugrađena podešavanja za pozadinu, DOM Box, javascript dodatke. Iskusite budućnost kreiranja rasporeda već danas.

Demo EBT moduli Preuzmite EBT module

❗Dodatni tipovi pasusa (EPT) – Novo iskustvo rada sa pasusima

Dodatni tipovi pasusa (EPT) – analogni skup modula zasnovan na pasusima.

Demo EPT moduli Preuzmite EPT module

Scroll

12.15.5. Ubrizgavanje zavisnosti (Dependency Injection) u prilagođenoj klasi/servisu

25/05/2025, by Ivan

Menu

U prethodnim člancima smo objasnili šta su Servisi, ubrizgavanje zavisnosti (Dependency Injection - DI) i kako ih koristiti u svom kontroleru, bloku i formi:

12.15. Servisi i Dependency Injection.
12.15.1. Dependency Injection u kontroleru
12.15.2. Dependency Injection u bloku
12.15.3. Dependency Injection u BaseForm
12.15.4. Dependency Injection u ConfigFormBase konfigurisanoj formi

U ovom članku je primer kako dodavati servise putem DI u prilagođenoj klasi/servisu. Pogledaćemo to na primeru modula Book:

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

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

U arguments navodimo koje objekte želimo da dobijemo iz Service container-a, tako da nije potrebno dodavati metodu create() u našu klasu.

/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;
...

/**
 * Definiše book manager.
 */
class BookManager implements BookManagerInterface {

  /**
   * Entity manager servis objekat.
   *
   * @var \Drupal\Core\Entity\EntityManagerInterface
   */
  protected $entityManager;

  /**
   * Config Factory servis objekat.
   *
   * @var \Drupal\Core\Config\ConfigFactoryInterface
   */
  protected $configFactory;

  /**
   * Niz knjiga.
   *
   * @var array
   */
  protected $books;

  /**
   * Storage za book outline.
   *
   * @var \Drupal\book\BookOutlineStorageInterface
   */
  protected $bookOutlineStorage;

  /**
   * Čuva spljoštene book stabla.
   *
   * @var array
   */
  protected $bookTreeFlattened;

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

  /**
   * Konstruktor BookManager objekta.
   */
  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;
  }

  ...

}

Iz primera sam uklonio kod koji nije vezan za DI, kako bi bilo preglednije šta je potrebno dodati u prilagođenu klasu. U svim ostalim slučajevima dodavanje servisa se vrši na isti način kao i u kontroleru.