Laravel 服务提供者实例教程 —— 创建 Service Provider 测试实例

举报
lxw1844912514 发表于 2022/03/27 01:27:06 2022/03/27
【摘要】 从某种意义上说,服务提供者有点类似HTTP控制器,HTTP控制器用于为相关路由注册提供统一管理,而服务提供者用于为相关服务容器提供统一绑定场所,此外服务提供者还可以做一些初始化启动操作。Laravel的每个核心组件都对应一个服务提供者,可以这么说,服务提供者是Laravel的心脏,是Laravel的核心,核心组件类在这里完...

从某种意义上说,服务提供者有点类似HTTP控制器,HTTP控制器用于为相关路由注册提供统一管理,而服务提供者用于为相关服务容器提供统一绑定场所,此外服务提供者还可以做一些初始化启动操作。Laravel的每个核心组件都对应一个服务提供者,可以这么说,服务提供者是Laravel的心脏,是Laravel的核心,核心组件类在这里完成注册、初始化以供后续调用。

既然这么重要,那么如何在自己的Laravel应用中定义和使用服务提供者呢?IT视频资源分享列表IT视频资源分享列表IT视频资源分享列表,分享是一种积极的生活态度!!!https://mp.weixin.qq.com/s/HqeXW1T_Ftx7CI1wvMTPfQ

1、定义服务类

有了上一节有关服务容器的讲述,理解起服务提供者来很简单。我们这里先定义一个绑定到容器的测试类TestService,为了对类的定义加以约束,我们同时还定义一个契约接口TestContract

定义TestContract如下:


     
  1. <?php
  2. namespace App\Contracts;
  3. interface TestContract
  4. {
  5. public function callMe($controller);
  6. }

定义TestService如下:


     
  1. <?php
  2. namespace App\Services;
  3. use App\Contracts\TestContract;
  4. class TestService implements TestContract
  5. {
  6. public function callMe($controller)
  7. {
  8. dd('Call Me From TestServiceProvider In '.$controller);
  9. }
  10. }

2、创建服务提供者

接下来我们定义一个服务提供者TestServiceProvider用于注册该类到容器。创建服务提供者可以使用如下Artisan命令:

 php artisan make:provider TestServiceProvider 

该命令会在app/Providers目录下生成一个TestServiceProvider.php文件,我们编辑该文件内容如下:


     
  1. <?php
  2. namespace App\Providers;
  3. use Illuminate\Support\ServiceProvider;
  4. use App\Services\TestService;
  5. class TestServiceProvider extends ServiceProvider
  6. {
  7. /**
  8. * Bootstrap the application services.
  9. *
  10. * @return void
  11. */
  12. public function boot()
  13. {
  14. //
  15. }
  16. /**
  17. * Register the application services.
  18. *
  19. * @return void
  20. * @author LaravelAcademy.org
  21. */
  22. public function register()
  23. {
  24. //使用singleton绑定单例
  25. $this->app->singleton('test',function(){
  26. return new TestService();
  27. });
  28. //使用bind绑定实例到接口以便依赖注入
  29. $this->app->bind('App\Contracts\TestContract',function(){
  30. return new TestService();
  31. });
  32. }
  33. }

可以看到我们使用了两种绑定方法,更多绑定方法参考服务容器文档

3、注册服务提供者

定义完服务提供者类后,接下来我们需要将该服务提供者注册到应用中,很简单,只需将该类追加到配置文件config/app.phpproviders数组中即可:


     
  1. 'providers' => [
  2. //其他服务提供者
  3. App\Providers\TestServiceProvider::class,
  4. ],

4、测试服务提供者

这样我们就可以在应用中使用该服务提供者了,为了测试该服务提供者我们首先使用Artisan命令创建一个资源控制器TestController

php artisan make:controller TestController

    

然后在路由配置文件routes.php中定义路由:

Route::resource('test','TestController');

    

最后去TestController中编写测试代码:


     
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use App\Http\Requests;
  5. use App\Http\Controllers\Controller;
  6. use App;
  7. use App\Contracts\TestContract;
  8. class TestController extends Controller
  9. {
  10. //依赖注入
  11. public function __construct(TestContract $test){
  12. $this->test = $test;
  13. }
  14. /**
  15. * Display a listing of the resource.
  16. *
  17. * @return Response
  18. * @author LaravelAcademy.org
  19. */
  20. public function index()
  21. {
  22. // $test = App::make('test');
  23. // $test->callMe('TestController');
  24. $this->test->callMe('TestController');
  25. }
  26. ...//其他控制器动作
  27. }

然后我们去浏览器中访问http://laravel.app:8000/test,分别测试使用App::make和依赖注入解析绑定类调用callMe方法的输出,结果一样,都是:

"Call Me From TestServiceProvider In TestController"

好了,大功告成,是不是很简单?!

此外,Laravel服务提供者还支持延迟加载,具体可参考服务提供者文档

文章来源: blog.csdn.net,作者:lxw1844912514,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/lxw1844912514/article/details/100029070

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。