Puncte:3

Care este modalitatea mai bună de a injecta serviciul controlerului cu __construct sau $instance = parent::create($container)

drapel ru

Folosesc mereu acest mod de a injecta serviciul la controler:

<?php    
spațiu de nume Drupal\TestModule\Controller;
    
    utilizați Drupal\Core\Controller\ControllerBase;
    utilizați Symfony\Component\DependencyInjection\ContainerInterface;
    
    clasa TestModuleController extinde ControllerBase {
    
      protejat $testModule;
    
        funcția publică __construct(TestModule $testModule) {
        $this->testModule = $testModule;
      }
    
      funcția publică statică create(ContainerInterface $container) {
        returnează static nou (
          $container->get('testModule.service')
        );
      }
    
      funcția publică testModule() {
        întoarcere [
          '#type' => 'markup',
          '#markup' => $this->testModule->getTestModule(),
        ];
      }
    }

Dar cu consola drupal generez controler cu serviciu (comanda drupal gcon) și obțin un alt cod:

<?php
    spațiu de nume Drupal\TestModule\Controller;
    
    utilizați Drupal\Core\Controller\ControllerBase;
    utilizați Symfony\Component\DependencyInjection\ContainerInterface;
    
    clasa TestModuleController extinde ControllerBase {
    
      protejat $testModule;
    
      funcția publică statică create(ContainerInterface $container) {
        $instanta = parent::create($container);
        $instanță->testModule = $container->get('testModule.service');
        returnare $instanță;
      }
    
      funcția publică testModule() {
        întoarcere [
          '#type' => 'markup',
          '#markup' => $this->testModule->getTestModule(),
        ];
      }
    }

Este a doua cale mai bună decât prima și care ar trebui să folosesc?

Puncte:3
drapel ru

TL;DR: A doua cale este mai bună.

Metoda constructorului __construi() este considerat intern, nu se poate (cu excepție) suprascrie-l. De exemplu. numărul sau tipul parametrilor obligatorii ai funcției se pot modifica. Prin urmare, codul primei versiuni s-ar putea întrerupe chiar și într-o actualizare minoră a nucleului Drupal. Doar cea de-a doua versiune este garantată să funcționeze cel puțin până la următoarea versiune majoră.

Pentru mai multe informații, vă recomand să citiți acest articol Schimbați înregistrarea din modulul Webform.

leymannx avatar
drapel ne
Ah, da, CR-ul este frumos. Am avut această problemă marcată: https://www.drupal.org/project/webform/issues/3067546
baikho avatar
drapel us
Aici, de asemenea, o lectură interesantă despre aceasta [Extinderea în siguranță a claselor de plugin Drupal 8, fără teama de modificări ale constructorului](https://www.previousnext.com.au/blog/safely-extending-drupal-8-plugin-classes-without-fear -modificări-de-constructor)

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.