"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Bootstrap du conteneur de services : mise en route

Bootstrap du conteneur de services : mise en route

Publié le 2024-08-07
Parcourir:106

Service Container Bootstrap: Getting Started

Avant de démarrer le sujet, créez deux nouveaux fichiers dans le répertoire des contrôleurs :

  1. destroy.php qui contient le code utilisé pour supprimer une note de la base de données.
  2. store.php qui contient le code pour créer une nouvelle note à l'aide de formulaires et de méthodes de requête.

Introduction au conteneur de services

Un conteneur de services est un modèle de conception qui centralise la gestion des dépendances entre les objets, offrant ainsi un moyen structuré d'accéder et de gérer les services au sein d'une application.

Il agit comme un registre des services au sein d'un site Web.

Classe de conteneur

Créez d’abord un fichier nommé Controller.php dans le répertoire Core. Dans ce cas, initialisez la classe Container, responsable de la gestion des liaisons et des résolutions de service.

  • bind() : enregistre un service auprès du conteneur.
  • resolve() : récupère un service du conteneur.
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);
    }
}

Classe d'application

La classe App agit comme une interface pour le conteneur, fournissant une interface pratique pour accéder aux services.

  • setContainer() : définit l'instance de conteneur pour l'application.
  • container() : récupère l'instance de conteneur.
  • bind() : enregistre un service auprès du conteneur.
  • resolve() : récupère un service du conteneur.
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);
    }
}

Amorcer

Bootstrap est un point d'une application, où tout est configuré et initialisé.

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

Dans ceci, le processus d'amorçage :

  1. Crée une nouvelle instance de conteneur ($container)
  2. Enregistre les services auprès du conteneur à l'aide de la méthode de liaison (par exemple, Core\Database)
  3. Définit le conteneur pour l'application à l'aide de App::setContainer($container)

Manette

Les services peuvent être résolus à partir du conteneur dans les contrôleurs à l'aide de la méthode App::resolve().

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

Maintenant, un conteneur de services est correctement construit et vous pouvez voir que le projet fonctionne bien.

J'espère que vous l'avez bien compris.

Déclaration de sortie Cet article est reproduit sur : https://dev.to/ghulam_mujtaba_247/service-container-bootstrap-getting-started-293j?1 En cas d'infraction, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3