suchen
HeimBackend-EntwicklungPHP-TutorialDetaillierte Erklärung der Laravel 5.5-Kernarchitektur

Detaillierte Erklärung der Laravel 5.5-Kernarchitektur

Feb 23, 2018 am 09:06 AM
laravel核心详解

Dieser Artikel führt Sie hauptsächlich in ein tiefgreifendes Verständnis der Kernarchitektur von Laravel 5.5 ein. Der Artikel stellt sie anhand von Bildern, Texten und Beispielcodes ausführlich vor Editor.

1. Die Abhängigkeitsinjektionsmethode

übergibt den Komponentennamen und das Framework wird automatisch instanziiert.

kann beispielsweise direkt verwendet werden , das am häufigsten verwendete Anforderungsobjekt

2. Der Kern von Laravel ist tatsächlich ein IoC-Container Sehr leichtgewichtig, und es gibt nichts Magisches oder Wesentliches an den Anwendungsfunktionen. Verschiedene von vielen Menschen verwendete Funktionsmodule wie Route (Routing), Eloquent ORM (Datenbank-ORM-Komponente), Request (Anfrage), Response (Antwort) usw. werden tatsächlich von Klassenmodulen bereitgestellt, die nichts mit dem Kern zu tun haben Der Prozess von der Registrierung über die Instanziierung dieser Klassen bis hin zur endgültigen Verwendung durch Sie liegt tatsächlich in der Verantwortung des Service-Containers von Laravel.

Der Dienstanbieter ist hauptsächlich in zwei Teile unterteilt: Registrieren (Registrierung) und Booten (Booten, Initialisierung)

3 Dienstanbieter

Eine Klasse muss Eigentum des sein Container Um extrahieren zu können, müssen Sie sich zunächst für diesen Container registrieren. Da Laravel diesen Container einen Service-Container nennt, müssen wir, wenn wir einen Service benötigen, zuerst den Service registrieren und an den Container binden. Dann ist das Ding, das den Service bereitstellt und den Service an den Container bindet, der Service-Provider.

4. Fügen Sie Ihre eigene Klasse zum IOC-Container hinzu

4.1 Erstellen Sie eine neue Validierungsklasse

4.2

4.3. Binden Sie die Validierungsklasse an den Provider

4.4. Provider zum IOC-Container hinzufügen
<?php namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ValidateProvider extends ServiceProvider
{
 /**
 * Bootstrap the application services.
 *
 * @return void
 */
 public function boot()
 {
 //
 }

 /**
 * Register the application services.
 *
 * @return void
 */
 public function register()
 {
 $this->app->bind('valicate',function(){
  return new Validate();
 });
 }
}

4.5, verwenden Sie

4.6, Erfolg!

5. Fassade

Fassade wird verwendet, um eine einheitliche Schnittstelle bereitzustellen, unabhängig davon, welchen Cache Sie verwenden, Redis oder Memcache Sie können die Methode „cache::get()“ verwenden, um den Wert abzurufen. Ob Sie Redis oder Memcahe verwenden, hängt davon ab, welche Methode Sie im Dienstanbieter gebunden haben. Die Implementierung von cache::get() besteht darin, die Facade-Methode getFacadeAccessor zu erben und den Schlüsselwert zurückzugeben, den Sie in den Container binden, z. B. den Cache. Dann verwendet die Facade-Klasse die PHP-Magievariable __callstatic() aus dem Container stammen. Analysieren Sie den an den Cache gebundenen Dienst, an den der zuvor erwähnte Dienstanbieter gebunden ist

5.1, zum Beispiel per E-Mail in config/app.php

5.2. Diese Klasse gibt nur einen Mailer zurück

5.3 Wenn ihre Sendemethode aufgerufen wird, wird sie in die Callstatic eingegeben magische Methode

5.4 Diese Methode ruft die Instanz von Mailer ab, also app('mailer')

5.5. Diese Instanz kann die Sendemethode der Mailer-Klasse aufrufen

6. Vertrag

Laravel's Vertrag ist eine Reihe von Schnittstellen, die die vom Framework bereitgestellten Kerndienste definieren. Beispielsweise definiert der IlluminateContractsQueueQueue-Vertrag die Methoden, die zum Einreihen von Aufgaben in die Warteschlange erforderlich sind, während der IlluminateContractsMailMailer-Vertrag die Methoden definiert, die zum Senden von E-Mails erforderlich sind. Das Framework stellt für jeden Vertrag entsprechende Implementierungen bereit.

Der Vorteil besteht darin, dass eine geringe Kopplung und Einfachheit des Programms erreicht wird.

Niedrige Kopplung#

Schauen wir uns zunächst etwas Code für die Cache-Implementierung mit hoher Kopplung an. Wie folgt:

In dieser Klasse ist das Programm stark mit dem angegebenen Cache gekoppelt. Weil wir auf eine bestimmte Caching-Klasse aus einem Erweiterungspaket angewiesen sind. Sobald die API dieser Erweiterung geändert wird, muss sich unser Code entsprechend ändern.
<?php namespace App\Orders;
class Repository
{
 /**
 * 缓存实例。
 */
 protected $cache;
 /**
 * 创建一个仓库实例。
 *
 * @param \SomePackage\Cache\Memcached $cache
 * @return void
 */
 public function __construct(\SomePackage\Cache\Memcached $cache)
 {
 $this->cache = $cache;
 }

 /**
 * 按照 Id 检索订单
 *
 * @param int $id
 * @return Order
 */
 public function find($id)
 {
 if ($this->cache->has($id)) {
  //
 }
 }
}

Wenn wir die zugrunde liegende Caching-Technologie (Memcached) durch eine andere Caching-Technologie (Redis) ersetzen möchten, müssen wir die Repository-Klasse ebenfalls erneut ändern. Die Repository-Klasse sollte nicht zu viel darüber wissen, wer die Daten bereitgestellt hat oder wie sie bereitgestellt wurden usw.

Im Vergleich zum obigen Ansatz können wir eine einfache, vom Erweiterungspaket unabhängige Schnittstelle verwenden, um unseren Code zu verbessern:

<?php namespace App\Orders;
use Illuminate\Contracts\Cache\Repository as Cache;
class Repository
{
 /**
 * 缓存实例。
 */
 protected $cache;

 /**
 * 创建一个仓库实例。
 *
 * @param Cache $cache
 * @return void
 */
 public function __construct(Cache $cache)
 {
 $this->cache = $cache;
 }
}

现在,更改之后的代码没有与任何扩展包甚至是 Laravel 耦合。而契约扩展包不包含任何实现和依赖项,你可以轻松地写任何给定契约的替代实现,来实现不修改任何关于缓存消耗的代码就可以替换缓存实现。

相关推荐:

Laravel 5.5实现前后台登陆

如何实现Laravel 5.5可响应接口

Laravel 5.5中为响应请求提供的可响应接口详解_php实例

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung der Laravel 5.5-Kernarchitektur. 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
PHP und Python: Verschiedene Paradigmen erklärtPHP und Python: Verschiedene Paradigmen erklärtApr 18, 2025 am 12:26 AM

PHP ist hauptsächlich prozedurale Programmierung, unterstützt aber auch die objektorientierte Programmierung (OOP). Python unterstützt eine Vielzahl von Paradigmen, einschließlich OOP, funktionaler und prozeduraler Programmierung. PHP ist für die Webentwicklung geeignet, und Python eignet sich für eine Vielzahl von Anwendungen wie Datenanalyse und maschinelles Lernen.

PHP und Python: Ein tiefes Eintauchen in ihre GeschichtePHP und Python: Ein tiefes Eintauchen in ihre GeschichteApr 18, 2025 am 12:25 AM

PHP entstand 1994 und wurde von Rasmuslerdorf entwickelt. Es wurde ursprünglich verwendet, um Website-Besucher zu verfolgen und sich nach und nach zu einer serverseitigen Skriptsprache entwickelt und in der Webentwicklung häufig verwendet. Python wurde Ende der 1980er Jahre von Guidovan Rossum entwickelt und erstmals 1991 veröffentlicht. Es betont die Lesbarkeit und Einfachheit der Code und ist für wissenschaftliche Computer, Datenanalysen und andere Bereiche geeignet.

Wählen Sie zwischen PHP und Python: Ein LeitfadenWählen Sie zwischen PHP und Python: Ein LeitfadenApr 18, 2025 am 12:24 AM

PHP eignet sich für Webentwicklung und schnelles Prototyping, und Python eignet sich für Datenwissenschaft und maschinelles Lernen. 1.PHP wird für die dynamische Webentwicklung verwendet, mit einfacher Syntax und für schnelle Entwicklung geeignet. 2. Python hat eine kurze Syntax, ist für mehrere Felder geeignet und ein starkes Bibliotheksökosystem.

PHP und Frameworks: Modernisierung der SprachePHP und Frameworks: Modernisierung der SpracheApr 18, 2025 am 12:14 AM

PHP bleibt im Modernisierungsprozess wichtig, da es eine große Anzahl von Websites und Anwendungen unterstützt und sich den Entwicklungsbedürfnissen durch Frameworks anpasst. 1.PHP7 verbessert die Leistung und führt neue Funktionen ein. 2. Moderne Frameworks wie Laravel, Symfony und Codesigniter vereinfachen die Entwicklung und verbessern die Codequalität. 3.. Leistungsoptimierung und Best Practices verbessern die Anwendungseffizienz weiter.

Auswirkungen von PHP: Webentwicklung und darüber hinausAuswirkungen von PHP: Webentwicklung und darüber hinausApr 18, 2025 am 12:10 AM

PhPhas significantantyPactedWebDevelopmentAndendendsbeyondit.1) iTpowersMAjorPlatforms-LikewordpressandExcelsInDatabaseInteractions.2) php'SadaptabilityAllowStoscaleForLargeApplicationsfraMe-Linien-Linien-Linien-Linienkripte

Wie funktioniert der Php -Typ -Hinweis, einschließlich Skalartypen, Rückgabetypen, Gewerkschaftstypen und nullbaren Typen?Wie funktioniert der Php -Typ -Hinweis, einschließlich Skalartypen, Rückgabetypen, Gewerkschaftstypen und nullbaren Typen?Apr 17, 2025 am 12:25 AM

PHP -Typ -Eingabeaufforderungen zur Verbesserung der Codequalität und der Lesbarkeit. 1) Tipps zum Skalartyp: Da Php7.0 in den Funktionsparametern wie int, float usw. angegeben werden dürfen. 3) Eingabeaufforderung für Gewerkschaftstyp: Da Php8.0 in Funktionsparametern oder Rückgabetypen angegeben werden dürfen. 4) Nullierstyp Eingabeaufforderung: Ermöglicht die Einbeziehung von Nullwerten und Handlungsfunktionen, die Nullwerte zurückgeben können.

Wie handelt es sich bei PHP -Objektklonen (Klonschlüsselwort) und der __clone Magic -Methode?Wie handelt es sich bei PHP -Objektklonen (Klonschlüsselwort) und der __clone Magic -Methode?Apr 17, 2025 am 12:24 AM

Verwenden Sie in PHP das Klonschlüsselwort, um eine Kopie des Objekts zu erstellen und das Klonierungsverhalten über die \ _ \ _ Clone Magic -Methode anzupassen. 1. Verwenden Sie das Klonschlüsselwort, um eine flache Kopie zu erstellen und die Eigenschaften des Objekts, nicht die Eigenschaften des Objekts zu klonen. 2. Die \ _ \ _ Klonmethode kann verschachtelte Objekte tief kopieren, um flache Kopierprobleme zu vermeiden. 3. achten Sie darauf, dass kreisförmige Referenzen und Leistungsprobleme beim Klonen vermieden werden, und optimieren Sie die Klonierungsvorgänge, um die Effizienz zu verbessern.

PHP vs. Python: Anwendungsfälle und AnwendungenPHP vs. Python: Anwendungsfälle und AnwendungenApr 17, 2025 am 12:23 AM

PHP eignet sich für Webentwicklungs- und Content -Management -Systeme, und Python eignet sich für Datenwissenschafts-, maschinelles Lernen- und Automatisierungsskripte. 1.PHP hat eine gute Leistung beim Erstellen von schnellen und skalierbaren Websites und Anwendungen und wird üblicherweise in CMS wie WordPress verwendet. 2. Python hat sich in den Bereichen Datenwissenschaft und maschinelles Lernen mit reichen Bibliotheken wie Numpy und TensorFlow übertrifft.

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.