当前位置:网站首页>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
边栏推荐
- Numpy -- epidemic data analysis case
- Logback日志框架第三方jar包 免费获取
- Syntaxhighlight highlights the right scroll bar
- Unity3D_ Class fishing project, control the distance between collision walls to adapt to different models
- Strengthen real-time data management, and the British software helps the security construction of the medical insurance platform
- Logback logging framework third-party jar package is available for free
- Numpy --- basic learning notes
- Unity3D_ Class fishing project, bullet rebound effect is achieved
- Excessive dependence on subsidies, difficult collection of key customers, and how strong is the potential to reach the dream of "the first share of domestic databases"?
- A link opens the applet code. After compilation, it is easy to understand
猜你喜欢
numpy---基础学习笔记
Dotween -- ease function
Apache Doris just "graduated": why should we pay attention to this kind of SQL data warehouse?
numpy--疫情数据分析案例
Enterprise log analysis system elk
神经网络c语言中的指针是怎么回事
Three. JS introductory learning notes 07: external model import -c4d to JSON file for web pages -fbx import
torch. Numel action
Power of leetcode-231-2
2022 the 4th China (Jinan) International Smart elderly care industry exhibition, Shandong old age Expo
随机推荐
统计学习方法——感知机
Three. JS introductory learning notes 08:orbitcontrols JS plug-in - mouse control model rotation, zoom in, zoom out, translation, etc
There are many ways to realize the pause function in JS
A link opens the applet code. After compilation, it is easy to understand
[wechat applet] Chapter (5): basic API interface of wechat applet
How does geojson data merge the boundaries of regions?
U3D_ Infinite Bessel curve
Three. JS introductory learning notes 19: how to import FBX static model
10 schemes to ensure interface data security
星瑞格数据库入围“2021年度福建省信息技术应用创新典型解决方案”
Numpy --- basic learning notes
Numpy -- epidemic data analysis case
Shader basic UV operations, translation, rotation, scaling
Unity3d click events added to 3D objects in the scene
Sysom case analysis: where is the missing memory| Dragon lizard Technology
修改配置文件后tidb无法启动
Eye of depth (VI) -- inverse of matrix (attachment: some ideas of logistic model)
Shandong old age Expo, 2022 China smart elderly care exhibition, smart elderly care and aging technology exhibition
2022山东智慧养老展,适老穿戴设备展,养老展,山东老博会
[excelexport], Excel to Lua, JSON, XML development tool