当前位置:网站首页>Laravel 服务提供者实例教程 —— 创建 Service Provider 测试实例
Laravel 服务提供者实例教程 —— 创建 Service Provider 测试实例
2022-07-07 14:07:00 【全栈程序员站长】
从某种意义上说,服务提供者有点类似HTTP控制器,HTTP控制器用于为相关路由注册提供统一管理,而服务提供者用于为相关服务容器提供统一绑定场所,此外服务提供者还可以做一些初始化启动操作。Laravel的每个核心组件都对应一个服务提供者,可以这么说,服务提供者是Laravel的心脏,是Laravel的核心,核心组件类在这里完成注册、初始化以供后续调用。
既然这么重要,那么如何在自己的Laravel应用中定义和使用服务提供者呢?
1、定义服务类
有了上一节有关服务容器的讲述,理解起服务提供者来很简单。我们这里先定义一个绑定到容器的测试类TestService,为了对类的定义加以约束,我们同时还定义一个契约接口TestContract。
定义TestContract如下:
<?php
namespace App\Contracts;
interface TestContract
{
public function callMe($controller);
}定义TestService如下:
<?php
namespace App\Services;
use App\Contracts\TestContract;
class TestService implements TestContract
{
public function callMe($controller)
{
dd('Call Me From TestServiceProvider In '.$controller);
}
}2、创建服务提供者
接下来我们定义一个服务提供者TestServiceProvider用于注册该类到容器。创建服务提供者可以使用如下Artisan命令:
php artisan make:provider TestServiceProvider 该命令会在app/Providers目录下生成一个TestServiceProvider.php文件,我们编辑该文件内容如下:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Services\TestService;
class TestServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
//
}
/**
* Register the application services.
*
* @return void
* @author LaravelAcademy.org
*/
public function register()
{
//使用singleton绑定单例
$this->app->singleton('test',function(){
return new TestService();
});
//使用bind绑定实例到接口以便依赖注入
$this->app->bind('App\Contracts\TestContract',function(){
return new TestService();
});
}
}可以看到我们使用了两种绑定方法,更多绑定方法参考服务容器文档。
3、注册服务提供者
定义完服务提供者类后,接下来我们需要将该服务提供者注册到应用中,很简单,只需将该类追加到配置文件config/app.php的providers数组中即可:
'providers' => [
//其他服务提供者
App\Providers\TestServiceProvider::class,
],4、测试服务提供者
这样我们就可以在应用中使用该服务提供者了,为了测试该服务提供者我们首先使用Artisan命令创建一个资源控制器TestController:
php artisan make:controller TestController然后在路由配置文件routes.php中定义路由:
Route::resource('test','TestController');最后去TestController中编写测试代码:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use App;
use App\Contracts\TestContract;
class TestController extends Controller
{
//依赖注入
public function __construct(TestContract $test){
$this->test = $test;
}
/**
* Display a listing of the resource.
*
* @return Response
* @author LaravelAcademy.org
*/
public function index()
{
// $test = App::make('test');
// $test->callMe('TestController');
$this->test->callMe('TestController');
}
...//其他控制器动作
}然后我们去浏览器中访问http://laravel.app:8000/test,分别测试使用App::make和依赖注入解析绑定类调用callMe方法的输出,结果一样,都是:
"Call Me From TestServiceProvider In TestController"好了,大功告成,是不是很简单?!
此外,Laravel服务提供者还支持延迟加载,具体可参考服务提供者文档。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/113202.html原文链接:https://javaforall.cn
边栏推荐
- There are many ways to realize the pause function in JS
- 分步式监控平台zabbix
- C Alibaba cloud OSS file upload, download and other operations (unity is available)
- 深度之眼(六)——矩阵的逆(附:logistic模型一些想法)
- Mesh merging under ue4/ue5 runtime
- 喜讯!科蓝SUNDB数据库与鸿数科技隐私数据保护管理软件完成兼容性适配
- MySQL数据库基本操作-DQL-基本查询
- 山东老博会,2022中国智慧养老展会,智能化养老、适老科技展
- 过度依赖补助,大客户收款难,冲刺“国产数据库第一股”的达梦后劲有多足?
- 121. The best time to buy and sell stocks
猜你喜欢

AE learning 02: timeline

What about the pointer in neural network C language

SPI master rx time out中断

企业级日志分析系统ELK

Odoo集成Plausible埋码监控平台

Three. JS introductory learning notes 03: perspective projection camera

MySQL数据库基本操作-DQL-基本查询

Unity3D_ Class fishing project, control the distance between collision walls to adapt to different models

航運船公司人工智能AI產品成熟化標准化規模應用,全球港航人工智能/集裝箱人工智能領軍者CIMC中集飛瞳,打造國際航運智能化標杆

Talk about the cloud deployment of local projects created by SAP IRPA studio
随机推荐
招标公告:2022年云南联通gbase数据库维保公开比选项目(第二次)比选公告
Communication mode between application program and MATLAB
Vs tool word highlight with margin
Shader_ Animation sequence frame
SPI master RX time out interrupt
asyncio 概念和用法
2022第四届中国(济南)国际智慧养老产业展览会,山东老博会
通知Notification使用全解析
laravel 是怎么做到运行 composer dump-autoload 不清空 classmap 映射关系的呢?
numpy--数据清洗
SysOM 案例解析:消失的内存都去哪了 !| 龙蜥技术
Three. JS introductory learning notes 13: animation learning
星瑞格数据库入围“2021年度福建省信息技术应用创新典型解决方案”
招标公告:福建省农村信用社联合社数据库审计系统采购项目(重新招标)
It's different for rich people to buy a house
95. (cesium chapter) cesium dynamic monomer-3d building (building)
应用程序和matlab的通信方式
神经网络c语言中的指针是怎么回事
Shader basic UV operations, translation, rotation, scaling
Apache Doris刚“毕业”:为什么应关注这种SQL数据仓库?