php环境安装 php函数 流程控制语句 正则表达式 php数组 php日期 php分页 php上传下载 php图像处理 php文件操作 php会话 php类库
WordPress DeDecms phpcms 帝国cms php168 Destoon ecshop Discuz PHPWind Thinkphp 十天学会php 视频教程 新手问题
当前位置: 首页 > CMS教程 > 其它CMS > 列表

Laravel中ServiceProvider使用场景示例详解

发布:smiling 来源: PHP粉丝网  添加日期:2023-10-16 17:00:16 浏览: 评论: 0 

这篇文章主要为大家介绍了Laravel中ServiceProvider使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪。

ServiceProvider 的方式接入到 Laravel

有些朋友说,看了很多资料也不太明白 ServiceProvider 到底是干嘛用的,今天我试图用大白话聊一聊 ServiceProvier。

设想一个场景,你写了一个CMS,那自然就包含了路由、配置、数据库迁移、帮助函数或类等。如果你要用 ServiceProvider 的方式接入到 Laravel,应该怎么办?

我们在上述用了 “接入到 Laravel” 这样的字眼,本质上就是把这些信息告诉 Kernel。如何告诉呢?使用 Laravel 提供的 ServiceProvider,默认 ServiceProvider 要提供两个方法 register 和 boot。

register 就是把实例化对象的方式注册到容器中。

boot 就是做一些把配置文件推到项目根目录下的 config 目录下面,加载配置到 Kernel 或加载路由等动作。

顺序是先 register 再 boot。

源码验证

这点可以在源码中得到佐证:

Laravel中ServiceProvider使用场景示例详解

干说也无趣,分析一个开源的 ServiceProvider 更直观。

https://github.com/tymondesigns/jwt-auth

开源组件的 ServiceProvider

看这个开源组件的 ServiceProvider 是怎么写的:

https://github.com/tymondesigns/jwt-auth/blob/develop/src/Providers/LaravelServiceProvider.php

  1. public function boot() 
  2.     $path = realpath(__DIR__.'/../../config/config.php'); 
  3.     $this->publishes([$path => config_path('jwt.php')], 'config'); 
  4.     $this->mergeConfigFrom($path'jwt'); 
  5.     $this->aliasMiddleware(); 
  6.     $this->extendAuthGuard(); 

非常简单,把配置文件推到 config 目录下,加载配置文件,给中间件设置一个别名,扩展一下 AuthGuard。

看它的基类 https://github.com/tymondesigns/jwt-auth/blob/develop/src/Providers/AbstractServiceProvider.php

  1. public function register() 
  2.     $this->registerAliases(); 
  3.     $this->registerJWTProvider(); 
  4.     $this->registerAuthProvider(); 
  5.     $this->registerStorageProvider(); 
  6.     $this->registerJWTBlacklist(); 
  7.     $this->registerManager(); 
  8.     $this->registerTokenParser(); 
  9.     $this->registerJWT(); 
  10.     $this->registerJWTAuth(); 
  11.     $this->registerPayloadValidator(); 
  12.     $this->registerClaimFactory(); 
  13.     $this->registerPayloadFactory(); 
  14.     $this->registerJWTCommand(); 
  15.     $this->commands('tymon.jwt.secret'); 
  16. protected function registerNamshiProvider() 
  17.     $this->app->singleton('tymon.jwt.provider.jwt.namshi'function ($app) { 
  18.         return new Namshi( 
  19.             new JWS(['typ' => 'JWT''alg' => $this->config('algo')]), 
  20.             $this->config('secret'), 
  21.             $this->config('algo'), 
  22.             $this->config('keys'
  23.         ); 
  24.     }); 
  25. /** 
  26.  * Register the bindings for the Lcobucci JWT provider. 
  27.  * 
  28.  * @return void 
  29.  */ 
  30. protected function registerLcobucciProvider() 
  31.     $this->app->singleton('tymon.jwt.provider.jwt.lcobucci'function ($app) { 
  32.         return new Lcobucci( 
  33.             new JWTBuilder(), 
  34.             new JWTParser(), 
  35.             $this->config('secret'), 
  36.             $this->config('algo'), 
  37.             $this->config('keys'
  38.         ); 
  39.     }); 

本质上就是注册一些实例化对象的方法到容器,用于后来的自动装配,解决注入的依赖问题。

所以 ServiceProvider 本质上是个啥?它就是提供接入 Laravel 的方式,它本身并不实现具体功能,只是将你写好的功能以 Laravel 能识别的方式接入进去。

Tags: Laravel ServiceProvider

分享到:

  • 上一篇: 详解Laravel模型事件和模型事件在Trait中的使用
  • 下一篇: 最后一页

相关文章

  • · Laravel 5.6中的CURD操作(代码示例详解)(2020-01-15)
  • · 如何在laravel 5中创建用于XSS防御的中间件? (2020-01-16)
  • · 关于Laravel重定向的七种方法详解(2020-01-26)
  • · 如何在laravel 5中使用DB事务?(2020-01-31)
  • · Laravel中如何给图片加水印?(2020-04-05)
  • · Laravel框架数据库CURD操作、连贯操作总结(2021-04-10)
  • · Laravel框架路由配置总结、设置技巧大全(2021-04-10)
  • · Laravel框架中扩展函数、扩展自定义类的方法(2021-04-10)
  • · 跟我学Laravel之快速入门(2021-04-16)
  • · 跟我学Laravel之安装Laravel(2021-04-16)
  • · 跟我学Laravel之配置Laravel(2021-04-16)
  • · 跟我学Laravel之请求(Request)的生命周期(2021-04-16)
  • · 跟我学Laravel之路由(2021-04-16)
  • · 跟我学Laravel之请求与输入(2021-04-17)
  • · 跟我学Laravel之视图 & Response(2021-04-17)
  • · laravel安装和配置教程(2021-04-19)

玻璃钢生产厂家树脂玻璃钢雕塑工艺淮南人物玻璃钢雕塑制作厂家商场悬挂设计美陈珠海商场美陈雕塑山东通道商场美陈浙江城市标志玻璃钢雕塑新密铸造校园玻璃钢雕塑厂家商场童装美陈创意作品展示贵州玻璃钢雕塑凳子沈阳商场开业美陈桂林校园玻璃钢雕塑安装山西抽象玻璃钢雕塑多少钱广州玻璃钢雕塑培训摆件玻璃钢卡通雕塑定制玻璃钢花盆的好处潍坊市玻璃钢雕塑湖州抽象玻璃钢雕塑优势合肥商场节庆美陈玻璃钢雕塑模具定做厂家唐山玻璃钢仿真水果雕塑宝鸡玻璃钢仿铜雕塑定制厂家商场电梯美陈图片滨州学校玻璃钢雕塑生产厂家玻璃钢恐龙雕塑哪家价格实惠东莞玻璃钢机器人雕塑江阴美陈商场玻璃钢门头三角雕塑合肥户内玻璃钢雕塑制作盘龙区玻璃钢雕塑加工公司贵州玻璃钢人物雕塑报价香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化