suchen
HeimPHP-FrameworkLaravelWas ist das Implementierungsprinzip der Abhängigkeitsinjektion in Laravel?

In Laravel besteht das Implementierungsprinzip der Abhängigkeitsinjektion darin, die Klassenmethodenreflexion zu verwenden, um den Parametertyp abzurufen, dann den Container zum Erstellen der Instanz zu verwenden und sie dann mit der Rückruffunktion aufzurufen. Der injizierte Objektkonstruktor kann keine Parameter haben Andernfalls wird ein Fehler gemeldet und die Abhängigkeitsinjektion muss von der Router-Klasse aufgerufen werden, andernfalls kann die Injektion nicht direkt mit der neuen Methode erreicht werden.

Was ist das Implementierungsprinzip der Abhängigkeitsinjektion in Laravel?

Die Betriebsumgebung dieses Artikels: Windows 10-System, Laravel Version 6, Dell G3-Computer.

Was ist das Implementierungsprinzip der Abhängigkeitsinjektion von Laravel?

Der Laravel-Container umfasst die Umkehrung der Kontrolle und die Abhängigkeitsinjektion. Um es zu verwenden, binden Sie einfach zuerst das Objekt und Sie können es bei Bedarf direkt abrufen.

Eine spezifische Analyse finden Sie unter: http://laravelacademy.org/post/769.html

Normalerweise lauten unsere Anrufe wie folgt.

$config = $container->make('config');
$connection = new Connection($this->config);

Der Vorteil besteht darin, dass Sie eine Instanz nicht direkt neu erstellen müssen. Es gibt keine Änderung am von der Methode übergebenen Wert. Sie können diese Instanz auch an mehreren Stellen teilen.

Aber was hat das mit der Abhängigkeitsinjektion zu tun? Für eine echte Abhängigkeitsinjektion müssen keine Parameterwerte an die Methode übergeben werden. Sie müssen nur den Parametertyp der Methode angeben, und der Code findet die Beziehung automatisch und fügt sie automatisch ein die Abhängigkeit.

Diese Funktion kann sich wie folgt im Controller, Job usw. von Laravel widerspiegeln:

class TestController extends Controller
{
    public function anyConsole(Request $request, Auth $input)
    {
        //todo
    }
}

Sehen wir uns an, wie es die automatische Abhängigkeitsinjektion implementiert:

Der Kernel wird von index.PHP aufgerufen und über mehrere Ebenen aufgerufen Kernel-Pipelines und dann „To Router“ rufen über eine mehrschichtige Middleware-Pipeline auf. Schließlich befindet es sich in Zeile 124 von

Illuminate/Routing/Route.php.

public function run(Request $request)
{
    $this->container = $this->container ?: new Container;
    try {
        if (! is_string($this->action['uses'])) {
            return $this->runCallable($request);
        }
        if ($this->customDispatcherIsBound()) {
            return $this->runWithCustomDispatcher($request);
        }
        return $this->runController($request);
    } catch (HttpResponseException $e) {
        return $e->getResponse();
    }
}

Bestimmen Sie, ob $this->action[‘uses’] (Formatzeile wie: AppHttpControllerDatacenterRealTimeController@anyConsole) eine Zeichenfolge ist. $this->customDispatcherIsBound bestimmt, ob eine benutzerdefinierte Route gebunden ist. Springen Sie dann zu $this->runController($request).

protected function runController(Request $request)
{
    list($class, $method) = explode('@', $this->action['uses']);
    $parameters = $this->resolveClassMethodDependencies(
        $this->parametersWithoutNulls(), $class, $method
    );
    if (! method_exists($instance = $this->container->make($class), $method)) {
        throw new NotFoundHttpException;
    }
    return call_user_func_array([$instance, $method], $parameters);
}

$this->resolveClassMethodDependencies Schon beim Blick auf den Namen erkennt man, dass es sich bei dieser Methode um die Methode handelt, nach der wir suchen. $this->parametersWithoutNulls() dient zum Herausfiltern von Nullzeichen. $class und $method lauten wie folgt: AppHttpControllerDatacenterRealTimeController bzw. anyConsole.

protected function resolveClassMethodDependencies(array $parameters, $instance, $method)
{
    if (! method_exists($instance, $method)) {
        return $parameters;
    }
    return $this->resolveMethodDependencies(
        $parameters, new ReflectionMethod($instance, $method)
    );
}

new ReflectionMethod($instance, $method) ist das Reflexionsobjekt, das die Klassenmethode erhält, siehe Dokument: http://www.php.net/manual/zh/class.reflectionmethod.php

Springe zu Illuminate unten /Routing/RouteDependencyResolverTrait.php Zeile 54.

public function resolveMethodDependencies(array $parameters, ReflectionFunctionAbstract $reflector)
{
    $originalParameters = $parameters;
    foreach ($reflector->getParameters() as $key => $parameter) {
        $instance = $this->transformDependency(
            $parameter, $parameters, $originalParameters
        );
        if (! is_null($instance)) {
            $this->spliceIntoParameters($parameters, $key, $instance);
        }
    }
    return $parameters;
}

Rufen Sie das Klassenparameter-Array über die Reflection-Klassenmethode ab, durchlaufen Sie es dann und übergeben Sie es an die Methode $this->transformDependency. Wenn die Instanz nicht abgerufen werden kann, rufen Sie $this->spliceIntoParameters auf, um die Parameter zu löschen.

protected function transformDependency(ReflectionParameter $parameter, $parameters, $originalParameters)
{
    $class = $parameter->getClass();
    if ($class && ! $this->alreadyInParameters($class->name, $parameters)) {
        return $this->container->make($class->name);
    }
}

Endlich habe ich den Schatten des Containers gesehen. Ja, das endgültige Objekt wurde durch die Make-Methode des Containers herausgenommen. Zu diesem Zeitpunkt werden die Parameter erstellt und schließlich vom call_user_func_array der runController-Methode zurückgerufen.

Zusammenfassung:

Das Prinzip der Abhängigkeitsinjektion besteht eigentlich darin, die Klassenmethodenreflexion zu verwenden, um den Parametertyp zu erhalten, und dann den Container zum Erstellen der Instanz zu verwenden. Verwenden Sie dann die Callback-Funktion, um es aufzurufen.

Der injizierte Objektkonstruktor darf keine Parameter haben. Andernfalls wird ein Fehler gemeldet. Fehlendes Argument 1

Abhängigkeitsinjektion ist gut, muss aber von der Router-Klasse aufgerufen werden, sonst kann die Injektion nicht direkt mit der neuen Methode erreicht werden. Aus diesem Grund können nur Controller- und Job-Klassen diese Funktion nutzen.

【Verwandte Empfehlungen: Laravel-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWas ist das Implementierungsprinzip der Abhängigkeitsinjektion in Laravel?. 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
Laravel -Frame -Fähigkeiten teilenLaravel -Frame -Fähigkeiten teilenApr 18, 2025 pm 01:12 PM

In dieser Zeit des kontinuierlichen technologischen Fortschritts ist das Mastering Advanced Frameworks für moderne Programmierer von entscheidender Bedeutung. Dieser Artikel hilft Ihnen dabei, Ihre Entwicklungsfähigkeiten zu verbessern, indem Sie wenig bekannte Techniken im Laravel-Framework teilen. Dieser Artikel wird für seine elegante Syntax und eine breite Palette von Funktionen bekannt und werden in seinen leistungsstarken Funktionen eingraben und praktische Tipps und Tricks bieten, damit Sie effiziente und pflegende Webanwendungen erstellen können.

Der Unterschied zwischen Laravel und ThinkPhpDer Unterschied zwischen Laravel und ThinkPhpApr 18, 2025 pm 01:09 PM

Laravel und ThinkPhp sind beide populäre PHP -Frameworks und haben ihre eigenen Vor- und Nachteile in der Entwicklung. In diesem Artikel wird die beiden Tiefe verglichen und ihre Architektur, Funktionen und Leistungsunterschiede hervorgehoben, um Entwicklern zu helfen, fundierte Entscheidungen auf der Grundlage ihrer spezifischen Projektanforderungen zu treffen.

Laravel -BenutzeranmeldungsfunktionslisteLaravel -BenutzeranmeldungsfunktionslisteApr 18, 2025 pm 01:06 PM

Das Erstellen von Benutzeranmeldungsfunktionen in Laravel ist eine entscheidende Aufgabe. Dieser Artikel bietet einen umfassenden Überblick, der jeden kritischen Schritt von der Registrierung der Benutzer bis zur Anmeldung überprüft. Wir werden in die Leistung der integrierten Überprüfungsfunktionen von Laravel eintauchen und Sie durch das Anpassen und Erweitern des Anmeldesvorgangs auf den spezifischen Anforderungen führen. Wenn Sie diese Schritt-für-Schritt-Anweisungen befolgen, können Sie ein sicheres und zuverlässiges Anmeldesystem erstellen, das Benutzern Ihrer Laravel-Anwendung ein nahtloses Zugriffserlebnis bietet.

Welche Versionen von Laravel gibt es? So wählen Sie die Version von Laravel für Anfänger ausWelche Versionen von Laravel gibt es? So wählen Sie die Version von Laravel für Anfänger ausApr 18, 2025 pm 01:03 PM

In dem LaRavel Framework -Versionsauswahlhandbuch für Anfänger taucht dieser Artikel in die Versionsunterschiede von Laravel ein, um Anfänger bei der Entscheidung über fundierte Entscheidungen zwischen vielen Versionen zu unterstützen. Wir werden uns auf die wichtigsten Funktionen jeder Version konzentrieren, ihre Vor- und Nachteile vergleichen und nützliche Ratschläge geben, um Anfängern zu helfen, die am besten geeignete Version von Laravel auf der Grundlage ihrer Fähigkeiten und der Projektanforderungen auszuwählen. Für Anfänger ist die Auswahl einer geeigneten Version von Laravel von entscheidender Bedeutung, da sie ihre Lernkurve und ihre allgemeine Entwicklungserfahrung erheblich beeinflussen kann.

Wie sehe ich die Versionsnummer von Laravel an? So sehen Sie die Versionsnummer von LaravelWie sehe ich die Versionsnummer von Laravel an? So sehen Sie die Versionsnummer von LaravelApr 18, 2025 pm 01:00 PM

Das Laravel-Framework verfügt über integrierte Methoden, um die Versionsnummer einfach zu sehen, um die verschiedenen Anforderungen der Entwickler zu erfüllen. In diesem Artikel werden diese Methoden untersucht, einschließlich der Verwendung des Befehlszeilen -Tools des Composers, der Zugriff auf .Env -Dateien oder das Erhalten von Versionsinformationen über PHP -Code. Diese Methoden sind für die Aufrechterhaltung und Verwaltung der Versionierung von Laravel -Anwendungen von wesentlicher Bedeutung.

Die neueste Methode zur Verwendung von PHP -Framework LaravelDie neueste Methode zur Verwendung von PHP -Framework LaravelApr 18, 2025 pm 12:57 PM

Laravel ist ein beliebtes PHP-basierter Webanwendungs-Framework, das bei den Entwicklern für seine elegante Syntax und leistungsstarke Funktionen beliebt ist. Die neueste Version führt viele Verbesserungen und neue Funktionen ein, die die Entwicklungserfahrung und die Anwendungsleistung verbessern sollen. Dieser Artikel wird in den neuesten Ansatz von Laravel eingehen und sich darauf konzentrieren, wie diese Updates nutzen können, um leistungsstärkere und effizientere Webanwendungen zu erstellen.

Laravel Framework InstallationsmethodeLaravel Framework InstallationsmethodeApr 18, 2025 pm 12:54 PM

Artikelzusammenfassung: Dieser Artikel enthält detaillierte Schritt-für-Schritt-Anweisungen, um die Leser zu leiten, wie das Laravel-Framework einfach installiert werden kann. Laravel ist ein leistungsstarkes PHP -Framework, das den Entwicklungsprozess von Webanwendungen beschleunigt. Dieses Tutorial deckt den Installationsprozess von den Systemanforderungen bis zur Konfiguration von Datenbanken und das Einrichten von Routing ab. Durch die Ausführung dieser Schritte können die Leser schnell und effizient eine solide Grundlage für ihr Laravel -Projekt legen.

Wie man laravel lernt wie man laravel kostenlos lerntWie man laravel lernt wie man laravel kostenlos lerntApr 18, 2025 pm 12:51 PM

Möchten Sie das Laravel -Rahmen lernen, aber unter keinen Ressourcen oder dem wirtschaftlichen Druck leiden? Dieser Artikel bietet Ihnen ein kostenloses Lernen von Laravel und lehrt Sie, wie Sie Ressourcen wie Online -Plattformen, Dokumente und Community -Foren verwenden, um eine solide Grundlage für Ihre PHP -Entwicklungsreise zu schaffen.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor

SecLists

SecLists

SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.