Heim >PHP-Framework >Laravel >Detaillierte Erläuterung der Kernarchitektur des Laravel-Frameworks
vorgestellt, um die Kernarchitektur des Laravel-Frameworks zu erläutern. Ich hoffe, es wird den Freunden, die es brauchen, hilfreich sein.
Freunde, die das Laravel-Framework verwendet haben, wissen, dass das Laravel-Framework neben der Bereitstellung einiger Grundfunktionen (wie Controller, Ansichten, Modelle) auch Middleware, Fassaden, Verträge usw. enthält. Wie funktionieren diese Dinge? ? Wie verwende ich das Laravel-Framework? Lassen Sie mich heute ausführlich mit Ihnen sprechen.
Zunächst sollten Sie das Architekturmuster des Laravel-Frameworks verstehen (Designkern
, das Laravel-Framework wird unter Verwendung des Servicekomponenten-Entwicklungsmodells entwickelt und das Laravel-Framework besteht aus verschiedenen Servicekomponenten)
Laravel besteht aus Mehrere Dienstanbieter Laravel-Komponenten. Hierarchisches Design: Legen Sie Klassenbibliotheken mit denselben Funktionen im selben Ordner ab. Das Laravel-Framework verfügt über mehrere Klassen, aus denen Dienste bestehen, und mehrere Dienste bilden Komponenten. Klasse -> Komponente
Laravel verwendet ein komponentenbasiertes Entwicklungsmodell,
Mehrere Klassen -> Komponente, mehrere Klassen bilden eine Komponente
Mehrere Komponenten stellen unterschiedliche Dienste bereit, und dann bilden mehrere Dienste unser Projekt.
Theoretisch besteht der Lebenszyklus hauptsächlich aus diesen Phasen, aber unter diesen müssen sich die meisten Entwickler nur auf
Routing, Middleware, Controller usw. konzentrieren. und Abschlüsse Funktionen, Logikverarbeitungund andere Schritte
Service
app/config/app.php
definiert.
Dienstanbieterapp/config/app.php
里面
服务提供者
可以给你提供一组服务的东西就是服务提供者,laravel里面如上所示其实定义的服务器提供者,比如IlluminateAuthAuthServiceProvider::class
,提供认证服务的服务提供者。IlluminateCacheCacheServiceProvider::class
,提供缓存服务的服务提供者
好处:开发者可以节省下更多的精力去处理项目逻辑,且不同开发个体之间能达到一定默契,最重要的是,项目达到分层解耦,业务逻辑只依赖于服务,并不依赖于服务底层的实现。
解耦之后,我们可以任意升级或自定义服务的底层实现,只要确保底层类实现了该服务
总结:其实服务是一个抽象的概念,服务器提供者是完成这个抽象概念的具体实施者
服务容器
把所有的服务放在一个盒子里,存放服务的容器。laravel里面的服务容器位于
vendor/laravel/frameworksrcilluminateContainerContainer.php.
Container.php
IlluminateAuthAuthServiceProvider::class
, einen Dienstanbieter, der Authentifizierungsdienste bereitstellt. IlluminateCacheCacheServiceProvider::class
, ein Dienstanbieter, der Caching-Dienste bereitstellt Das Wichtigste ist, dass das Projekt eine hierarchische Entkopplung erreicht und die Geschäftslogik nur vom Dienst und nicht von der zugrunde liegenden Implementierung des Dienstes abhängt. Nach der Entkopplung können wir die zugrunde liegende Implementierung des Dienstes nach Belieben aktualisieren oder anpassen, solange wir sicherstellen, dass die zugrunde liegende Klasse den Dienst implementiert.
Zusammenfassung:
Service-Container
fasst alle Services in einer Box zusammen und speichert den Service-Container. Der Service-Container in Laravel befindet sich unter
IlluminateCookieCookieServiceProvider::class,IlluminateDatabaseDatabaseServiceProvider::class,
Container.php
, dem Service-Container des Laravel-Frameworks.
Vertrag
dient der Planung des Formats, der Methoden, Parameter usw. des Dienstleisters und regelt bestimmte Einschränkungen für den Dienstleister. Daher handelt es sich bei allen Verträgen im Rahmenwerk um Schnittstellen, sodass Leistungserbringer standardisiert werden können.
Facade
Facade zeigt einmal mehr die Exzellenz des Laravel-Designs. Es macht Laravel flexibler und einfacher zu erweitern: 1 Bereitstellung statischer Proxys für Dienste in Service-Containern
如上图所示:laravel框架是由多个服务组件构成的 -> 服务提供者(最下面的不同的服务组件)。Foundation
的 Application
用来创建服务提供者,创建好之后保存在Container
的 Container
的服务容器里面,交由他管理,Application
要继承 Container
。
为了约定服务提供者提供的服务,我们定义一个规范,这就是契约。
对于我们的用户(最上面的用户)想使用laravel框架,必须通过控制器来使用(上面的Controller),使用laravel框架主要是使用laravel里面的服务提供者(上面的 new 服务),这样就是最传统的开发模式,和服务器容器没有直接关系,如果laravel这样设计的话,基本上和其他框架一样,没有任何优势。所以一般不怎么做。
由于有契约,契约是服提供者的接口,所以我们也可以直接使用契约,new 服务旁边的黄色线。使用契约用注入的方式,这样使用的不好之处是如果一个方法里面使用多个契约的话,我们就得注入多个契约,这样代码看起来不优雅。
于是laravel里面就出现了门面,门面的出现方便我们优雅的调用服务器提供者的类。由于每个服务提供者的类太长了如:
IlluminateCookieCookieServiceProvider::class,IlluminateDatabaseDatabaseServiceProvider::class,
所以又引出了别名,使用别名之后 简化了我们调用的服务提供者的类。
事件:laravel里面的模型里面的事件,比如用户对数据库操作时做的一个监听。对整个项目运行进行监听,有监听的动作。类似tp5里面的钩子和行为。
中间件:做用户的请求做一定的过滤。
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Kernarchitektur des Laravel-Frameworks. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!