laravel的服务提供者是什么
发布时间 - 2019-06-18 00:00:00 点击率:次如果你使用过 laravel 框架的话,那么,你不可能没听说过服务容器和服务提供者。事实上,它们是 lavavel 框架核心,它们完成 larvel 应用中服务启动的艰巨任务。
在这篇文章中,我们将给大家介绍laravel的服务提供者是什么?
在学习服务提供者之前,先简单介绍一下服务容器,服务容器会在服务提供者中被经常使用。
简而言之,Laravel 服务容器 是一个用于存储绑定组件的盒子,它还会为应用提供所需的服务。
Laravel 文档中描述如下:
Laravel 服务容器是用于管理类的依赖和执行依赖注入的工具 - Laravel 文档
这样,当我们需要注入一个内置的组件或服务时,可以在构造函数或方法中使用类型提示功能注入,然后在使用时从服务容器中自动解析出所需实例及其依赖!是不是很酷?这个功能可以让我们从手动管理组件中解脱出来,从而降低系统耦合度。
让我们看一个简单实例来加深理解。
如你所见,SomeClass 需要使用 FooBar 实例。换句话说它需要依赖其它组件。Laravel 实现自动注入需要从服务容器中查找并执行注入适当的依赖。
如果你希望了解 Laravel 是如何知道需要将哪个组件或服务绑定到服务容器中的,答案是通过服务提供者实现的。服务提供者完成将组件绑定到服务容器的工作。在服务提供者内部,这个工作被称之为服务容器绑定,绑定处理由服务提供者完成。
服务提供者实现了服务绑定,绑定处理则由 register 方法完成。
同时,这又会引入一个新的问题:Laravel 是如何知道有哪些服务提供者的呢?这个我们貌似还没有讨论到吧?我到时看到,之前有说 Laravel 会自动的去查找到服务!朋友,你的问题太多了:Laravel 只是一个框架,它不是一个超级英雄,不是么?我们当然需要去明确的告知 Laravel 框架我们有哪些服务提供者。
让我们来瞧瞧
config/app.php配置文件。你会找到一个用于 Laravel 应用启动过程中被载入的服务提供者配置列表。'providers' => [ /* * Laravel Framework Service Providers... */ Illuminate\Auth\AuthServiceProvider::class, Illuminate\Broadcasting\BroadcastServiceProvider::class, Illuminate\Bus\BusServiceProvider::class, Illuminate\Cache\CacheServiceProvider::class, Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, Illuminate\Cookie\CookieServiceProvider::class, Illuminate\Database\DatabaseServiceProvider::class, Illuminate\Encryption\EncryptionServiceProvider::class, Illuminate\Filesystem\FilesystemServiceProvider::class, Illuminate\Foundation\Providers\FoundationServiceProvider::class, Illuminate\Hashing\HashServiceProvider::class, Illuminate\Mail\MailServiceProvider::class, Illuminate\Notifications\NotificationServiceProvider::class, Illuminate\Pagination\PaginationServiceProvider::class, Illuminate\Pipeline\PipelineServiceProvider::class, Illuminate\Queue\QueueServiceProvider::class, Illuminate\Redis\RedisServiceProvider::class, Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, Illuminate\Session\SessionServiceProvider::class, Illuminate\Translation\TranslationServiceProvider::class, Illuminate\Validation\ValidationServiceProvider::class, Illuminate\View\ViewServiceProvider::class, /* * Package Service Providers... */ Laravel\Tinker\TinkerServiceProvider::class, /* * Application Service Providers... */ App\Providers\AppServiceProvider::class, App\Providers\AuthServiceProvider::class, // App\Providers\BroadcastServiceProvider::class, App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class, ],
以上就是有关服务容器的基本概念。
什么是服务提供者
如果说服务容器是提供绑定和依赖注入的的工具,那么 服务提供者 则是实现绑定的工具。
让我们先来看一个内容提供的服务提供者服务来理解它的运行原理。打开
vender/laravel/framework/src/Illuminate/Cache/CacheServiceProvider.php文件。public function register() { $this->app->singleton('cache', function ($app) { return new CacheManager($app); }); $this->app->singleton('cache.store', function ($app) { return $app['cache']->driver(); }); $this->app->singleton('memcached.connector', function () { return new MemcachedConnector; }); }这里我们需要将重点集中在 register 方法中,这个方法用于绑定服务到服务容器。如你所见,这里一共执行了三个服务的绑定处理:
cache、cache.store和memcached.connector。然后,当我们需要在 Laravel 中使用 cache 服务是,服务容器会解析出 CacheManager 实例并返回。也就是说我们仅仅是提供了一个可以从
$this->app访问的对应关系表。通过服务提供者绑定服务是 Laravel 服务容器绑定服务的正确打开方式。同时通过服务提供者的 register 方法,还有利于理解 Laravel 服务容器是如何管理所有的服务的。我们之前提到过,通过从
config/app.php配置文件中读取服务提供者配置列表,从将所有服务注册服务容器中。以上,就是服务提供者的介绍。
更多laravel相关技术文章,请访问laravel框架入门教程栏目进行学习!
# laravel # php # 构造函数 # register # this # memcached # 绑定 # 让我们 # 是一个 # 如果你 # 所需 # 当我们 # 所见 # 配置文件 # 如你 # 文档
相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571 】
相关推荐: 如何在阿里云域名上完成建站全流程? 详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四) 湖南网站制作公司,湖南上善若水科技有限公司做什么的? 如何用腾讯建站主机快速创建免费网站? 浅述节点的创建及常见功能的实现 如何在腾讯云服务器快速搭建个人网站? javascript中对象的定义、使用以及对象和原型链操作小结 如何构建满足综合性能需求的优质建站方案? Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】 阿里云网站搭建费用解析:服务器价格与建站成本优化指南 jQuery validate插件功能与用法详解 iOS验证手机号的正则表达式 深圳网站制作平台,深圳市做网站好的公司有哪些? Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层 Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析 Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】 如何正确选择百度移动适配建站域名? 小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像 消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工 标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析 宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法 laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法 微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】 如何在Windows 2008云服务器安全搭建网站? php增删改查怎么学_零基础入门php数据库操作必知基础【教程】 浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】 Laravel如何配置和使用缓存?(Redis代码示例) Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】 Python制作简易注册登录系统 黑客如何通过漏洞一步步攻陷网站服务器? 学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站? iOS UIView常见属性方法小结 网站制作企业,网站的banner和导航栏是指什么? 如何用免费手机建站系统零基础打造专业网站? Laravel如何与Inertia.js和Vue/React构建现代单页应用 中山网站推广排名,中山信息港登录入口? Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】 Windows家庭版如何开启组策略(gpedit.msc)?(安装方法) 简历没回改:利用AI润色让你的文字更专业 手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办? Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程 高端网站建设与定制开发一站式解决方案 中企动力 Laravel怎么实现支付功能_Laravel集成支付宝微信支付 香港服务器网站卡顿?如何解决网络延迟与负载问题? HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】 详解Android——蓝牙技术 带你实现终端间数据传输 Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程 Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践 如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环 Python高阶函数应用_函数作为参数说明【指导】


ifications\NotificationServiceProvider::class,
Illuminate\Pagination\PaginationServiceProvider::class,
Illuminate\Pipeline\PipelineServiceProvider::class,
Illuminate\Queue\QueueServiceProvider::class,
Illuminate\Redis\RedisServiceProvider::class,
Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
Illuminate\Session\SessionServiceProvider::class,
Illuminate\Translation\TranslationServiceProvider::class,
Illuminate\Validation\ValidationServiceProvider::class,
Illuminate\View\ViewServiceProvider::class,
/*
* Package Service Providers...
*/
Laravel\Tinker\TinkerServiceProvider::class,
/*
* Application Service Providers...
*/
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
// App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
],