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
25/05/2025, by Ivan

Menu

U prethodnom članku smo razmotrili šta je Dependency Injection:

12.15. Servisi i Dependency Injection.

U ovom članku dat je primer koda sa Dependency Injection u kontroleru.

/modules/custom/drupalbook/src/Controller/ModalFormContactController.php:

<?php

namespace Drupal\drupalbook\Controller;

use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Ajax\AjaxResponse;
use Drupal\Core\Ajax\OpenModalDialogCommand;
use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Form\FormBuilder;

/**
 * ModalFormContactController klasa.
 */
class ModalFormContactController extends ControllerBase {

  /**
   * Konstruktor forme.
   *
   * @var \Drupal\Core\Form\FormBuilder
   */
  protected $formBuilder;

  /**
   * Konstruktor ModalFormContactController klase.
   *
   * @param \Drupal\Core\Form\FormBuilder $form_builder
   *   Konstruktor forme.
   */
  public function __construct(FormBuilder $form_builder) {
    $this->formBuilder = $form_builder;
  }

  /**
   * {@inheritdoc}
   *
   * @param \Symfony\Component\DependencyInjection\ContainerInterface $container
   *   Drupal servisni kontejner.
   *
   * @return static
   */
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('form_builder')
    );
  }

  /**
   * Povratni poziv za modalni formular.
   */
  public function openModalForm() {
    $response = new AjaxResponse();
    $modal_form = $this->formBuilder->getForm('Drupal\drupalbook\Form\ModalForm');
    $enquiry_title = $this->t("Pošaljite upit za @business_name", ['@business_name' => $modal_form['business_name']['#value']]);
    $response->addCommand(new OpenModalDialogCommand($enquiry_title, $modal_form));

    return $response;
  }

}

Hajde da razložimo delove koda za DI (Dependency Injection). 

namespace Drupal\drupalbook\Controller;

Prvo navodimo namespace (prostor imena), mesto gde se ovaj fajl nalazi, gde je drupalbook mašinsko ime vašeg modula.

use Symfony\Component\DependencyInjection\ContainerInterface;

Uvozimo klasu ContainerInterface, koju ćemo kasnije koristiti za dobijanje objekata iz servisnog kontejnera.

  /**
   * Konstruktor forme.
   *
   * @var \Drupal\Core\Form\FormBuilder
   */
  protected $formBuilder;

Deklarišemo svojstvo u kome ćemo čuvati objekat iz servisnog kontejnera. Komentar @var \Namespace pomaže vašem IDE-u da zna koje metode objekat ima i da ih predloži u automatskom dovršavanju.

  /**
   * Konstruktor ModalFormContactController klase.
   *
   * @param \Drupal\Core\Form\FormBuilder $form_builder
   *   Konstruktor forme.
   */
  public function __construct(FormBuilder $form_builder) {
    $this->formBuilder = $form_builder;
  }

Dalje, u konstruktoru treba da primimo u parametru objekat iz servisnog kontejnera, taj objekat ćemo praviti u sledećem metodu create(), a ovde ga dobijamo i čuvamo u prethodno deklarisano svojstvo $formBuilder. Ako povezujete novi servis, dodajte ga parametar po parametar u __construct(). Dakle, ako želite da povežete 10 servisa, imaćete 10 parametara.

  /**
   * {@inheritdoc}
   *
   * @param \Symfony\Component\DependencyInjection\ContainerInterface $container
   *   Drupal servisni kontejner.
   *
   * @return static
   */
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('form_builder')
    );
  }

U metodu create dobijamo objekat servisnog kontejnera i vraćamo objekat $form_builder, koji u konstruktoru čuvamo u svojstvu za objekte (formBuilder). Obratite pažnju na pravila pisanja imena promenljivih: za objekte iz servisnog kontejnera koristimo mala slova i donju crtu ($form_builder), a za svojstva klase gde te objekte čuvamo koristimo camelCase sa malim prvim slovom (formBuilder).

Sada možemo koristiti objekat iz servisnog kontejnera u metodama naše klase:

  /**
   * Povratni poziv za modalni formular.
   */
  public function openModalForm() {
    ...
    $modal_form = $this->formBuilder->getForm('Drupal\drupalbook\Form\ModalForm');
    ...
  }