Laravel服务/服务提供者/容器/契约和门面

1.服务是什么?

服务是提供了一些功能的类,比如发送邮件,写日志.

2.Laravel服务提供者是什么?

服务提供者中指明了这个提供者可以提供哪些服务(注册服务),以及服务注册后默认调用一些方法(boot).

3.能否不用服务提供者,直接调用服务?

可以,依靠Laravel的依赖注入,你可以方便的调用任何一个服务,而不用服务提供者.

4.既然3成立,那么服务提供者有什么存在的必要?

a.利用服务提供者的boot方法,可以做一些全局性的设置,如在boot中对view的composer
b.服务提供者利用bind或singleton可以实现一个接口到实现类绑定,调用该服务对应的接口,会返回了一个具体的实现类.这不是更复杂了么?是的,是有点复杂,但好处是松耦合,更加灵活,调整服务也变的更加简单.

5.服务容器是什么?

服务容器是一个用于管理类依赖和执行依赖注入的强大工具.简而言之就是,你将功能类(服务)作为参数传递到一个容器类中,以后直接调用容器类就可以.服务提供者的绑定就是向Laravel核心容器类,传递了一个服务类来做参数,核心容器类内部实现了绑定该服务作为容器类的一个属性.

9.服务提供者在应用启动时,就会注册相应的服务,这会不会显得没有必要?因为有些情况下,不是应用开始就需要这个服务的.

是,所以你可以在服务提供者中延迟加载,只有在你需要的时候才加载这个服务.设置服务提供者的defer属性和provides方法.

10.服务提供者功能之一是实现了一个接口到实现类的绑定,能否根据具体情况,比如A控制器中调用服务接口实现接口的A实现类,B控制器中调用接口的B实现类?

可以,在服务提供者中绑定的时候实现依据上下文环境绑定.

$this->app->when(‘App\Handlers\Commands\CreateOrderHandler‘)
->needs(‘App\Contracts\EventPusher‘)
->give(‘App\Services\PubNubEventPusher‘);

11.有没有一个服务提供者聚合多个服务的结果,对外使用一个统一的名称来访问?

可以,使用服务提供者的标签

12.能从服务容器中解析出一个对象吗?

可以.
a.使用$this->app->make(‘xxx‘)或$this->app[‘xxx‘],在控制器中使用帮助函数app()->make(‘XXX‘)
b.可以简单的通过在类的构造函数中对依赖进行类型提示来从容器中解析对象,包括控制器、事件监听器、队列任务、中间件等都是通过这种方式
public function __construct(UserRepository $users)
{
$this->users = $users;
}

13.能否在从容器中解析对象的时候触发一个事件?

可以,在服务提供者中使用$this->app->resolving

14.门面和契约是什么?

a.Laravel 的契约是指框架提供的一系列定义核心服务的接口,比如, Illuminate\Contracts\Queue\Queue 契约定义了队列任务需要的方法, Illuminate\Contracts\Mail\Mailer 契约定义了发送邮件所需要的方法.每一个契约都有框架提供的相应实现。比如,Laravel 提供了多个驱动的队列实现,邮件实现则由 SwiftMailer驱动。所有的 Laravel 契约都有其 GitHub 库,这为所有有效的契约提供了快速入门指南,同时也可以作为独立、解耦的包被包开发者使用。

b.Laravel 的门面为 Laravel 服务的使用提供了一个简便的方式——不再需要从服务容器中类型提示和解析契约.如Auth::user(),Auth::check();Cache::get()等

15.基本点

a.服务提供者在项目根目录下的Providers
b.可以使用命令创建一个服务提供者
php artisan make:provider TestProvider
c.每个服务提供者需要注册在在config/app.php的providers数组中

时间: 2024-10-05 04:33:35

Laravel服务/服务提供者/容器/契约和门面的相关文章

Laravel 服务容器 IoC(控制反转) 和 DI(依赖注入)

Laravel 服务容器 IoC(控制反转) 和 DI(依赖注入) IoC 容器, laravel 的核心 Laravel 的核心就是一个 IoC 容器,根据文档,称其为“服务容器”,顾名思义,该容器提供了整个框架中需要的一系列服务.作为初学者,很多人会在这一个概念上犯难,因此,我打算从一些基础的内容开始讲解,通过理解面向对象开发中依赖的产生和解决方法,来逐渐揭开“依赖注入”的面纱,逐渐理解这一神奇的设计理念. 本文一大半内容都是通过举例来让读者去理解什么是 IoC(控制反转) 和 DI(依赖注

laravel 服务容器实现原理

前言 通过实现laravel 框架功能,以便深入理解laravel框架的先进思想. 什么是服务容器 服务容器是用来管理类依赖与运行依赖注入的工具.Laravel框架中就是使用服务容器来实现 ** 控制反转 ** 和 ** 依赖注入 **. 什么是控制反转(IoC)和依赖注入(DI) 控制反转(IoC) 就是说把创建对象的** 控制权 进行转移,以前创建对象的主动权和创建时机是由自己把控的,而现在这种权力转移到第三方,也就是 Laravel ** 中的容器. 依赖注入(DI)则是帮助容器实现在运行

.netcore下的微服务、容器、运维、自动化发布

微服务 1.1     基本概念 1.1.1       什么是微服务? 微服务架构是SOA思想某一种具体实现.是一种将单应用程序作为一套小型服务开发的方法,每种应用程序都在其自己的进程中运行,并采用轻量级的通讯机制(TCP)进行通信.这些服务是围绕业务功能构建的,可以通过全自动部署机制进行独立部署.这些服务的集中化管理已经是最少的,它们可以用不同的编程语言编写,并使用不同的数据存储技术. 1.1.2       为什么要用微服务? 1.1.2.1   微服务解决了什么问题? 在微服务的最佳实践

阿里云宣布 Serverless 容器服务 弹性容器实例 ECI 正式商业化

摘要: 阿里云宣布弹性容器实例 ECI(Elastic Container Instance)正式商业化,ECI 是阿里云践行普惠的云计算理念,将 Serverless 和 Container 技术结合,提供的一款敏捷安全的Serverless容器运行服务. 1月2日,阿里云宣布弹性容器实例 ECI(Elastic Container Instance)正式商业化,ECI 是阿里云践行普惠的云计算理念,将 Serverless 和 Container 技术结合,提供的一款敏捷安全的Serverl

laravel框架之服务提供者(提及契约Contracts)

首先理解两个概念 1.契约:一组定义了框架核心服务的接口 2.服务提供者:所有 Laravel 应用程序启动的中心所在. 包括你自己的应用程序,以及所有的 Laravel 核心服务,都是通过服务提供者启动的. 启动指的是 注册 事物,包括注册服务容器绑定.事件侦听器.中间件,甚至路由. 我们还是继续超人的故事,现在拿xpower来具体分析 xpower的诞生---(契约和服务提供者) 1.定义一个契约(接口) app\Contracts文件夹下 <?php namespace App\Contr

9.Laravel5学习笔记:在laravel中注册自己的服务到容器中

问题描述 也许标题写的不够清楚,实际情况是,在我使用laravel的过程中,需要将自己的一个类,通过服务提供者注册到IOC容器中,但是在实际操作过程中,出现了以下错误: Unresolvable dependency resolving [Parameter #0 [ <required> $name ]] 意思就是说,我的注册东西,不能够进行类型转换.我的代码中没有进行代码说明需要的类型. 代码情况 代码主要实现的一个功能是,对传入的字符串进行AES加密.本来Laravel自身是提供了的,但

9.Laravel5学习笔记:在laravel中注冊自己的服务到容器中

问题描写叙述 或许标题写的不够清楚.实际情况是,在我使用laravel的过程中.须要将自己的一个类,通过服务提供者注冊到IOC容器中,可是在实际操作过程中.出现了下面错误: Unresolvable dependency resolving [Parameter #0 [ <required> $name ]] 意思就是说.我的注冊东西,不能够进行类型转换. 我的代码中没有进行代码说明须要的类型. 代码情况 代码主要实现的一个功能是,对传入的字符串进行AES加密. 本来Laravel自身是提供

laravel服务容器

\public\index.php 1 <?php 2 define('LARAVEL_START', microtime(true)); 3 //注册自动加载文件 4 require __DIR__.'/../vendor/autoload.php'; 5 /** 6 * 服务容器的生成 7 * 主要实现了服务容器的实例化和基本注册 8 *包括服务容器本身的注册,基础服务提供者注册,核心类别名注册和基本路径注册 9 * 10 */ 11 $app = require_once __DIR__.

laravel 服务容器的由来 代码展示

1 <?php 2 /** 3 * 目的:代码的完善来说明从 基础类的调用到 工厂类的使用 再到容器的出现的原因 4 * (首先要明白工厂类和容器的关系 可以理解:容器就是工厂类的升级版(为了解决类的依赖)) 5 * 如果不明白工厂类的往下看看,对比一下这几个例子,相信你就明白了. 6 * 下面举个例子: 7 * 简单模拟一个超人 8 * 1.一个超人 具备超人的能力(就是超人技能:如飞行 射击 扔炸弹 暴力攻击等能力) 9 * 2.从面向对象设计:首先分析应该分为超人类(Superman) 和