„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Service-Container-Bootstrap: Erste Schritte

Service-Container-Bootstrap: Erste Schritte

Veröffentlicht am 07.08.2024
Durchsuche:811

Service Container Bootstrap: Getting Started

Bevor Sie mit dem Thema beginnen, erstellen Sie zwei neue Dateien im Controller-Verzeichnis:

  1. destroy.php, die den Code enthält, der zum Löschen einer Notiz aus der Datenbank verwendet wird.
  2. store.php, die den Code zum Erstellen einer neuen Notiz mithilfe von Formularen und Anforderungsmethoden enthält.

Einführung in den Service-Container

Ein Service-Container ist ein Entwurfsmuster, das die Verwaltung von Abhängigkeiten zwischen Objekten zentralisiert und eine strukturierte Möglichkeit bietet, auf Dienste innerhalb einer Anwendung zuzugreifen und diese zu verwalten.

Es fungiert als Registrierung für Dienste innerhalb einer Website.

Containerklasse

Erstellen Sie zunächst eine Datei mit dem Namen Controller.php im Kernverzeichnis. Initialisieren Sie dabei die Container-Klasse, die für die Verwaltung von Dienstbindungen und -auflösungen verantwortlich ist.

  • bind(): Registriert einen Dienst beim Container.
  • resolve(): Ruft einen Dienst aus dem Container ab.
class Container {
    protected $bindings = [];

    public function bind($key, $resolver) {
        $this->bindings[$key] = $resolver;
    }

    public function resolve($key) {
        if (!array_key_exists($key, $this->bindings)) {
            throw new Exception("No matching binding found for {$key}");
        }
        $resolver = $this->bindings[$key];
        return call_user_func($resolver);
    }
}

App-Klasse

Die App-Klasse fungiert als Schnittstelle für den Container und bietet eine praktische Schnittstelle für den Zugriff auf Dienste.

  • setContainer(): Setzt die Containerinstanz für die App.
  • container(): Ruft die Containerinstanz ab.
  • bind(): Registriert einen Dienst beim Container.
  • resolve(): Ruft einen Dienst aus dem Container ab.
class App {
    protected static $container;

    public static function setContainer($container) {
        static::$container = $container;
    }

    public static function container() {
        return static::$container;
    }

    public static function bind($key, $resolver) {
        static::container()->bind($key, $resolver);
    }

    public static function resolve($key) {
        return static::container()->resolve($key);
    }
}

Bootstrap

Bootstrap ist ein Punkt einer Anwendung, an dem alles eingerichtet und initialisiert wird.

$container = new Container();
$container->bind('Core\Database', function () {
    $config = require base_path('config.php');
    return new Database($config['database']);
});
App::setContainer($container);

In diesem Fall der Bootstrap-Prozess:

  1. Erstellt eine neue Containerinstanz ($container)
  2. Registriert Dienste beim Container mithilfe der Bindungsmethode (z. B. Core\Database)
  3. Setzt den Container für die App mit App::setContainer($container)

Regler

Dienste können mithilfe der App::resolve()-Methode aus dem Container in Controllern aufgelöst werden.

$db = App::resolve('Core\Database');

Jetzt ist ein Service-Container ordnungsgemäß erstellt und Sie können sehen, dass das Projekt gut funktioniert.

Ich hoffe, dass Sie es klar verstanden haben.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/ghulam_mujtaba_247/service-container-bootstrap-getting-started-293j?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3