翼度科技»论坛 编程开发 PHP 查看内容

Laravel中ServiceProvider使用场景示例详解

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
ServiceProvider 的方式接入到 Laravel

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

设想一个场景,你写了一个CMS,那自然就包含了路由、配置、数据库迁移、帮助函数或类等。如果你要用
  1. ServiceProvider
复制代码
的方式接入到
  1. Laravel
复制代码
,应该怎么办?
我们在上述用了 “接入到
  1. Laravel
复制代码
” 这样的字眼,本质上就是把这些信息告诉
  1. Kernel
复制代码
。如何告诉呢?使用
  1. Laravel
复制代码
提供的
  1. ServiceProvider
复制代码
,默认
  1. ServiceProvider
复制代码
要提供两个方法
  1. register
复制代码
  1. boot
复制代码
  1. register
复制代码
就是把实例化对象的方式注册到容器中。
  1. boot
复制代码
就是做一些把配置文件推到项目根目录下的
  1. config
复制代码
目录下面,加载配置到
  1. Kernel
复制代码
或加载路由等动作。
顺序是先
  1. register
复制代码
  1. boot
复制代码


源码验证

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

干说也无趣,分析一个开源的
  1. ServiceProvider
复制代码
更直观。
https://github.com/tymondesig...

开源组件的 ServiceProvider

看这个开源组件的
  1. ServiceProvider
复制代码
是怎么写的:
https://github.com/tymondesig...
  1. public function boot()
  2. {
  3.     $path = realpath(__DIR__.'/../../config/config.php');
  4.     $this->publishes([$path => config_path('jwt.php')], 'config');
  5.     $this->mergeConfigFrom($path, 'jwt');
  6.     $this->aliasMiddleware();
  7.     $this->extendAuthGuard();
  8. }
复制代码
非常简单,把配置文件推到
  1. config
复制代码
目录下,加载配置文件,给中间件设置一个别名,扩展一下
  1. AuthGuard
复制代码

看它的基类 https://github.com/tymondesig...
  1. public function register()
  2. {
  3.     $this->registerAliases();
  4.     $this->registerJWTProvider();
  5.     $this->registerAuthProvider();
  6.     $this->registerStorageProvider();
  7.     $this->registerJWTBlacklist();
  8.     $this->registerManager();
  9.     $this->registerTokenParser();
  10.     $this->registerJWT();
  11.     $this->registerJWTAuth();
  12.     $this->registerPayloadValidator();
  13.     $this->registerClaimFactory();
  14.     $this->registerPayloadFactory();
  15.     $this->registerJWTCommand();
  16.     $this->commands('tymon.jwt.secret');
  17. }
  18. protected function registerNamshiProvider()
  19. {
  20.     $this->app->singleton('tymon.jwt.provider.jwt.namshi', function ($app) {
  21.         return new Namshi(
  22.             new JWS(['typ' => 'JWT', 'alg' => $this->config('algo')]),
  23.             $this->config('secret'),
  24.             $this->config('algo'),
  25.             $this->config('keys')
  26.         );
  27.     });
  28. }
  29. /**
  30. * Register the bindings for the Lcobucci JWT provider.
  31. *
  32. * @return void
  33. */
  34. protected function registerLcobucciProvider()
  35. {
  36.     $this->app->singleton('tymon.jwt.provider.jwt.lcobucci', function ($app) {
  37.         return new Lcobucci(
  38.             new JWTBuilder(),
  39.             new JWTParser(),
  40.             $this->config('secret'),
  41.             $this->config('algo'),
  42.             $this->config('keys')
  43.         );
  44.     });
  45. }
复制代码
本质上就是注册一些实例化对象的方法到容器,用于后来的自动装配,解决注入的依赖问题。
所以
  1. ServiceProvider
复制代码
本质上是个啥?它就是提供接入
  1. Laravel
复制代码
的方式,它本身并不实现具体功能,只是将你写好的功能以
  1. Laravel
复制代码
能识别的方式接入进去。
以上就是Laravel中ServiceProvider使用示例详解的详细内容,更多关于Laravel ServiceProvider的资料请关注脚本之家其它相关文章!

来源:https://www.jb51.net/program/290544itq.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具