Ich bin neu in Diensten (und Drupal 8!) Und versuche, Dienste herauszufinden. Ich denke, vielleicht mache ich das Erstellen nur auf veraltete Weise. Was ich tun möchte, ist, meinen "Hallo-Generator" zu einem Dienst zu machen und ihn in einem anderen Controller mit den folgenden Eigenschaften aufzurufen:
DBController.php
namespace Drupal\db\Controller;
use Drupal\Core\Controller\ControllerBase;
use Drupal\db\DbServices\HelloGenerator;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\Response;
class DBController extends ControllerBase
{
private $helloGenerator;
public function __construct(HelloGenerator $x) {
$this->helloGenerator = $x;
}
public function say($count) {
$hello = $this->helloGenerator->getHello($count);
return new Response($hello);
}
public static function create(ContainerInterface $container) {
$x = $container->get('db.hello_generator');
return new static ($x);
}
}
HellGenerator.php
Namespace Drupal \ db \ DbServices;
class HelloGenerator {
public function getHello($count) {
$foo = 4 + 4 + 4;
return $foo . ' ' . $count;
}
}
db.services.yml
services:
db.hello_generator:
class: Drupal\db\DbServices\HelloGenerator
db.db_says:
path: /db/says/{count}
defaults:
_controller: '\Drupal\db\Controller\DBController::say'
requirements:
_permission: 'access content'
Antworten:
Hier gibt es 3 Fragen:
1. Erstellen Sie einen Controller
1.1 Fügen Sie eine Controller-Klasse hinzu - Sie haben es geschafft. Für andere siehe Drupal-Dokumentation
1.2 Fügen Sie eine Routing-Datei hinzu - es scheint, dass dies in Ihrem Code fehlt:
my_module.routing.yml
Siehe Drupal-Dokumentation
2. Erstellen Sie einen Service
2.1 Fügen Sie eine Serviceklasse hinzu - Sie haben es geschafft.
2.2 Hinzufügen einer Routing-Datei - Sie haben es getan, obwohl sie zusätzlichen Code enthält, der zur Routing-Datei gehört. Das ist alles was Sie brauchen:
my_module.services.yml
Siehe Drupal-Dokumentation
3. Verwenden Sie Dienste in einem Controller
Du hast es geschafft. Hier ist eine Referenz für andere:
3.1 Überschreiben Sie die
create()
MethodeDie Controller-Klasse erbt diese Methode von
class ControllerBase
. Seine Aufgabe besteht darin, das Controller-Objekt zu erstellen. Beobachten Sie das Methodenargument: Es wird der Service-Container übergeben. Extrahieren Sie die benötigten Services und übergeben Sie sie an den Konstruktor:3.2 Dienste in initialisieren
__construct()
3.3 Starten Sie die Dienste
quelle
create()
Methode zurückzukehren. Ich nehme an würden Sie nicht gesagt haben , dass , obwohl , wenn ich etwas nicht verpasst hatte anderes , das sollte klar gewesen sein ... Ich denke , dass der Service funktioniert Pool Verbindungsobjekte?