手机版

对Laravel 5.5核心架构的深刻理解

时间:2021-09-01 来源:互联网 编辑:宝哥软件园 浏览:

前言

本文主要介绍关于Laravel 5.5核心架构的相关内容,分享给大家参考学习。下面就不多说了。我们来看看详细的介绍。

1.依赖注入

方法传入组件名称,框架将自动实例化,这可以直接在方法中使用

例如,最常用的requert对象

2.服务容器

其实Laravel的核心是一个IoC容器。Laravel本身的核心非常轻量级,没有什么神奇的实质性的应用功能。多人使用的各种功能模块,如路由、雄辩表单、请求、响应等。实际上是由与核心无关的类模块提供的。这些类由您从注册到实例化使用。事实上,Laravel的服务容器负责它们。

服务提供商主要分为两部分,注册和引导

3.服务提供商

如果一个类可以被容器提取,那么它必须首先在容器中注册。由于Laravel将这个容器称为服务容器,所以如果我们需要一个服务,我们必须首先将这个服务注册并绑定到容器。那么提供服务并将服务绑定到容器的就是服务提供者。

4.将您自己的类添加到IOC容器中

4.1.创建新的验证类

4.2.创建新的验证提供程序

4.3.将验证类绑定到提供程序

?phpnamespace App \ Providers使用照明\支持\服务提供商;类ValidateProvider扩展了ServiceProvider{ /** *引导应用程序服务。* * @ return void */public function boot(){//}/* * *注册应用程序服务。* * @ return void */public function register(){ $ this-app-bind(' Validate ',function(){ return new Validate();});}}4.4.将提供程序添加到国际奥委会容器

4.5.使用

4.6.成功!

5.外表

Facade用于提供统一的接口。例如,无论您使用哪个缓存、redis或memcache,客户端都可以使用cache:get()来获取该值。至于是使用redis还是memcahe,这取决于您在服务提供者中绑定了哪一个。cache:get()的实现是继承Facade方法getFacadeAccessor并返回您在容器中绑定的键值,如cache。然后Facade类将使用php魔变量_ _ callstatic(),callstatic的逻辑将从容器中分析缓存绑定的服务,也就是前面提到的服务提供者绑定了谁。

5.1,如config/app.php中的mail

5.2.这个类只返回一个邮件程序

5.3.如果它的send方法被调用,如果它不存在,它将进入callstatic的神奇方法

5.4.该方法将获得一个邮件程序实例,即app(“邮件程序”)

5.5.此实例可以调用邮件程序类的send方法

6.合同

Laravel的契约是一组定义框架提供的核心服务的接口。例如,照明\合同\队列\队列协定定义了排队任务所需的方法,而照明\合同\邮件\邮件协定定义了发送电子邮件所需的方法。该框架为每个合同提供相应的实现。

优点是耦合度低,程序简单。

低耦合#

首先,让我们看看一些高度耦合的缓存实现代码。以下:

?phpnamespace App \ Orders类存储库{ /** *缓存实例。*/受保护的$ cache/* * *创建仓库实例。* * @ param \ some package \ Cache \ Memcached $ Cache * @ return void */public function _ _ construct(\ some package \ Cache \ Memcached $ Cache){ $ this-Cache=$ Cache;}/* * *按Id检索订单* * @ param int $ id * @返回订单*/公共函数find($ Id){ if($ this-cache-has($ Id)){//} }在这个类中,程序与给定的缓存高度耦合。因为我们依赖于扩展包的特定缓存类。一旦这个扩展包的API改变了,我们的代码也必须相应地改变。

同样,如果我们想用另一种缓存技术(Redis)替换底层缓存技术(Memcached),我们必须再次修改这个存储库类。存储库类不应该太了解谁提供了这些数据或者如何提供的。

与上述方法相比,我们可以通过使用独立于扩展包的简单接口来改进代码:

?phpnamespace App \ Orders使用照明\合同\缓存\存储库作为缓存;类存储库{ /** *缓存实例。*/受保护的$ cache/* * *创建仓库实例。* * @ param Cache $ Cache * @ return void */public function _ _ construct(Cache $ Cache){ $ this-Cache=$ Cache;}}现在,更改后的代码没有与任何扩展包甚至Laravel耦合。但是,协定扩展包不包含任何实现和依赖项,因此您可以轻松编写给定协定的任何替代实现来替换缓存实现,而无需修改任何关于缓存消耗的代码。

摘要

以上就是本文的全部内容。希望本文的内容对大家的学习或工作有一定的参考价值。有问题可以留言交流。谢谢你的支持。

版权声明:对Laravel 5.5核心架构的深刻理解是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。