it-swarm.com.de

Wie verwende ich die globalen statischen Methoden class \ Drupal, um auf Dienste zuzugreifen?

Gibt es einen Unterschied zwischen dem Aufruf von \Drupal::service('config.factory') und \Drupal::configFactory()?

Ist es besser, den zweiten zu verwenden?

Kann \Drupal verwendet werden, um etwas anderes zu tun als Dienste anzurufen?

Die Dokumentation sagt:

Zugriff auf Dienste in globalen Funktionen

Die globale Drupal -Klasse bietet statische Methoden für den Zugriff auf mehrere der am häufigsten verwendeten Dienste. Beispielsweise gibt Drupal :: moduleHandler () den Modulhandlerdienst oder Drupal :: translation () den zurück String-Übersetzungsdienst: Wenn für den Dienst, den Sie verwenden möchten, keine dedizierte Methode vorhanden ist, können Sie mit der Drupal :: service () -Methode einen definierten Dienst abrufen.

In welchen Fällen gibt es keine spezielle Methode? Wie liste ich einfach alle abrufbaren Dienste auf?

4
Matoeil

\Drupal::configFactory() ist nur kürzer als \Drupal::service('config.factory'). Die Tatsache, dass Sie mit \Drupal::configFactory() den Dienstnamen in Ihrem Modul nicht fest codieren, ist wahrscheinlich kein Grund, ihn zu wählen, da Sie die meisten Dienstnamen immer noch fest codieren würden (die dedizierten Methoden don Nicht einmal ein Viertel aller verfügbaren Dienste abdecken), und die Wahrscheinlichkeit, dass ein Dienstname geändert wird, ist wahrscheinlich gering, da Drupal 8 eine stabile Version hat.
Wenn es eine dedizierte Methode für einen Dienst gibt, den ich in meinem Modul verwende, bevorzuge ich die Verwendung dieser dedizierten Methode, und ich bevorzuge die Verwendung der Abhängigkeitsinjektion gegenüber der Verwendung der statischen Methoden \Drupal.

Der Zweck der\Drupal-Klasse besteht darin, Zugriff auf die Dienste zu gewähren, die von Drupal oder Modulen von Drittanbietern bereitgestellt werden; sogar \Drupal::request() ruft einen Dienst auf Methode. Nein, Sie verwenden\Drupal nicht für Dinge, die keine Dienste sind. Auch in diesem Fall sollten Sie nicht von dieser Klasse abhängen, wenn es möglich ist, die Abhängigkeitsinjektion zu verwenden.

Eine Liste der von Modulen implementierten Dienste finden Sie in den mit den Modulen bereitgestellten .services.yml-Dateien, einschließlich der Kernmodule. Diese Dateien enthalten eine Liste der von Modulen implementierten Dienste. Es ist unmöglich, eine vollständige Liste zu erstellen, da jedes Modul alle benötigten Dienste implementieren kann.

1
kiamlaluno

\Drupal::service('config.factory') und \Drupal::configFactory() sind äquivalent; der zweite ist nur kürzer.

Es gibt viele, viele Dienste, die von Core bereitgestellt werden, und nur wenige von ihnen verfügen über eine dedizierte Methode. Eine Liste der Kerndienste finden Sie auf der Seite core.services.yml . Beachten Sie, dass dies nicht alle Dienste sind, die Core anbietet. Beispielsweise enthält ser.services.yml weitere Dienste.

Beachten Sie auch, dass es bei der Arbeit mit Klassen besser ist, die Abhängigkeitsinjektion zu verwenden, als statische Methoden aufzurufen. Statische Methoden sollten im Prozedurcode aufgerufen werden (in D8 bedeutet dies im Wesentlichen Hooks oder API-Funktionen).

Dies ist eine Diashow Ich habe sie verwendet, als ich diesen Monat eine Präsentation zur Abhängigkeitsinjektion bei Drupal Camp Tokyo) gehalten habe.

6
Jaypan