Heim  >  Artikel  >  PHP-Framework  >  Führen Sie Sie Schritt für Schritt durch, um die Abhängigkeitsinjektion in Laravel zu verstehen

Führen Sie Sie Schritt für Schritt durch, um die Abhängigkeitsinjektion in Laravel zu verstehen

PHPz
PHPzOriginal
2023-04-13 14:55:552304Durchsuche

1. Was ist Abhängigkeitsinjektion?

Abhängigkeitsinjektion ist ein Entwurfsmuster, das eine Objektentkopplung durch Übergabe abhängiger Objekte an Objekte erreicht. Mit anderen Worten: Abhängigkeitsinjektion ist eine Technologie, die abhängige Objekte über Konstruktoren, Eigenschaften oder Methoden weiterleitet, wodurch die Beziehung zwischen Klassen lockerer wird und die Kopplung des Codes verringert wird.

Im Laravel-Framework ist die Abhängigkeitsinjektion ein sehr wichtiges Konzept. Es ist die Grundlage für die Implementierung von Inversion of Control in Laravel.

2. Wie Laravel die Abhängigkeitsinjektion implementiert

Das Laravel-Framework verwendet die integrierte Reflection-Klasse von PHP, um die Abhängigkeitsinjektion zu implementieren. Die Reflection-Klasse wird hauptsächlich verwendet, um verschiedene Informationen über die Klasse abzurufen, einschließlich Klassenmethoden, Attribute, Anmerkungen usw.

1. Prinzip der Abhängigkeitsinjektion

Im Laravel-Framework wird die Abhängigkeitsinjektion über den Service-Container (Service Container) implementiert. Der Service-Container ist eine wichtige Komponente des Laravel-Frameworks. Es handelt sich um einen Abhängigkeitsinjektionscontainer, der zum Instanziieren und Verwalten von Klassenobjekten verwendet wird.

Im Laravel-Framework können Entwickler die folgenden Methoden verwenden, um die Abhängigkeitsinjektion zu implementieren:

  • Deklarieren Sie Abhängigkeiten im Konstruktor des Controllers.
  • Deklarieren Sie Abhängigkeiten in Controller-Methoden.
  • Verwenden Sie Abschlussfunktionen, um Objekte zu generieren Implementierungsprinzipien dieser drei Methoden nacheinander.
2. Deklarieren Sie Abhängigkeiten im Konstruktor des Controllers

Im Laravel-Framework werden Controller normalerweise durch Abhängigkeitsinjektion implementiert. Im Controller können wir Abhängigkeiten mithilfe von Konstruktoren deklarieren, und das Laravel-Framework instanziiert automatisch die erforderlichen Abhängigkeitsobjekte über den Reflexionsmechanismus.

Zum Beispiel haben wir eine UserController-Klasse, die von einer UserService-Klasse abhängen muss, was auf folgende Weise erreicht werden kann:

use App\Services\UserService;

class UserController extends Controller
{
    protected $userService;

    public function __construct(UserService $userService)
    {
        $this->userService = $userService;
    }

    public function getUser($id)
    {
        $user = $this->userService->getUser($id);
        return view('user', compact('user'));
    }
}
Im obigen Code deklarieren wir über den Konstruktor ein abhängiges Objekt $userService. Wenn die UserController-Klasse instanziiert wird, fügt das Laravel-Framework automatisch die erforderliche UserService-Instanz ein.

3. Abhängigkeiten in der Controller-Methode deklarieren

In einigen speziellen Szenarien müssen wir möglicherweise Abhängigkeiten in der Controller-Methode deklarieren. Wenn wir beispielsweise einige Hilfsklassenbibliotheken verwenden müssen, können wir dies durch Methodeninjektion erreichen.

Zum Beispiel haben wir eine UserController-Klasse, die die Cache-Bibliothek verwenden muss, die auf folgende Weise implementiert werden kann:

use Illuminate\Cache\Repository;

class UserController extends Controller
{
    public function getUser($id, Repository $cache)
    {
        $user = $cache->get('user_' . $id, function() use($id) {
            $userService = app(UserService::class);
            return $userService->getUser($id);
        });

        return view('user', compact('user'));
    }
}
Im obigen Code deklarieren wir ein abhängiges Objekt $cache über Parameter in der getUser-Methode. Wenn die getUser-Methode aufgerufen wird, fügt das Laravel-Framework automatisch die erforderliche Repository-Instanz ein.

4. Verwenden Sie die Verschlussfunktion, um Objekte zu generieren

Zusätzlich zu den beiden vorherigen Methoden können wir Objekte auch über die Verschlussfunktion generieren und das Objekt zur Verwaltung an das Laravel-Framework übergeben. Dieser Ansatz wird normalerweise verwendet, um einige spezielle Abhängigkeiten aufzulösen, z. B. Implementierungsklassen von Schnittstellen und abstrakte Klassen.

Zum Beispiel haben wir eine UserController-Klasse, die eine Schnittstelle verwenden muss, die wie folgt implementiert werden kann:

use App\Repositories\UserRepository;
use App\Services\UserService;
use Illuminate\Contracts\Container\Container;

class UserController extends Controller
{
    protected $container;

    public function __construct(Container $container)
    {
        $this->container = $container;
    }

    public function getUser($id)
    {
        $userService = $this->container->make(UserService::class, [
            'userRepository' => $this->container->make(UserRepository::class),
        ]);

        $user = $userService->getUser($id);
        return view('user', compact('user'));
    }
}
Im obigen Code haben wir ein Container-Objekt in den Konstruktor eingefügt und dann ein UserService-Objekt generiert die Make-Methode und übergeben Sie das UserRepository-Objekt als Parameter an die Make-Methode.

Durch die oben genannten Methoden können wir die Abhängigkeitsinjektion im Laravel-Framework implementieren, um den Code flexibler und skalierbarer zu machen.

3. Zusammenfassung

Abhängigkeitsinjektion ist ein sehr wichtiges Konzept im Laravel-Framework. Es erreicht den Zweck der Objektentkopplung durch die Übergabe abhängiger Objekte an Objekte. Das Laravel-Framework verwendet die in PHP integrierten Reflexionsklassen, um die Abhängigkeitsinjektion zu implementieren, wodurch die Beziehung zwischen den Klassen lockerer wird und die Kopplung des Codes verringert wird.

Im Laravel-Framework können wir die Abhängigkeitsinjektion durch Controller-Konstruktoren, Controller-Methoden und Abschlussfunktionen implementieren. Für unterschiedliche Szenarien eignen sich unterschiedliche Methoden, und Entwickler können basierend auf den tatsächlichen Anforderungen die geeignete Implementierungsmethode auswählen.

Das obige ist der detaillierte Inhalt vonFühren Sie Sie Schritt für Schritt durch, um die Abhängigkeitsinjektion in Laravel zu verstehen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn