当前位置:网站首页>Laravel service provider instance tutorial - create a service provider test instance
Laravel service provider instance tutorial - create a service provider test instance
2022-07-07 16:20:00 【Full stack programmer webmaster】
In a sense , Service providers are somewhat similar HTTP controller ,HTTP The controller is used to provide unified management for related route registration , The service provider is used to provide a unified binding place for related service containers , In addition, the service provider can also do some initialization and startup operations .Laravel Each core component of corresponds to a service provider , You can say that , The service provider is Laravel The heart of the , yes Laravel At the heart of , The core component class is registered here 、 Initialize for subsequent calls .
Since it's so important , So how to be in your own Laravel Define and use service providers in applications ?
1、 Define a service class
With Previous section About the service container , It's easy to understand service providers . Let's define a container bound test class TestService
, To constrain the definition of a class , We also define a contract interface TestContract
.
Definition TestContract
as follows :
<?php
namespace App\Contracts;
interface TestContract
{
public function callMe($controller);
}
Definition TestService
as follows :
<?php
namespace App\Services;
use App\Contracts\TestContract;
class TestService implements TestContract
{
public function callMe($controller)
{
dd('Call Me From TestServiceProvider In '.$controller);
}
}
2、 Create service provider
Next, we define a service provider TestServiceProvider
Used to register this class to the container . To create a service provider, you can use the following Artisan command :
php artisan make:provider TestServiceProvider
The order will be in app/Providers
Create one in the directory TestServiceProvider.php
file , We edit the file as follows :
<?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()
{
// Use singleton Binding singleton
$this->app->singleton('test',function(){
return new TestService();
});
// Use bind Bind instances to interfaces for dependency injection
$this->app->bind('App\Contracts\TestContract',function(){
return new TestService();
});
}
}
You can see that we use two binding methods , More binding method references Service container documentation .
3、 Register service provider
After defining the service provider class , Next, we need to register the service provider into the application , It's simple , Just append this class to the configuration file config/app.php
Of providers
Array :
'providers' => [
// Other service providers
App\Providers\TestServiceProvider::class,
],
4、 Test service providers
In this way, we can use the service provider in our application , To test the service provider, we first use Artisan Command to create a resource controller TestController
:
php artisan make:controller TestController
Then in the routing configuration file routes.php
Routing is defined in :
Route::resource('test','TestController');
Last to go TestController
Write test code in :
<?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
{
// Dependency injection
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');
}
...// Other controller actions
}
Then we go to the browser to visit http://laravel.app:8000/test
, Test and use respectively App::make
And dependency injection to resolve binding class calls callMe
Method output , Results the same , All are :
"Call Me From TestServiceProvider In TestController"
Okay , Be accomplished , Is it simple ?!
Besides ,Laravel Service providers also support delayed loading , For details, please refer to Service provider documentation .
Publisher : Full stack programmer stack length , Reprint please indicate the source :https://javaforall.cn/113202.html Link to the original text :https://javaforall.cn
边栏推荐
- Unity的三种单例模式(饿汉,懒汉,MonoBehaviour)
- 星瑞格数据库入围“2021年度福建省信息技术应用创新典型解决方案”
- 深度之眼(六)——矩阵的逆(附:logistic模型一些想法)
- 如何在shell中实现 backspace
- Apache Doris刚“毕业”:为什么应关注这种SQL数据仓库?
- three.js打造酷炫下雪效果
- 招标公告:2022年云南联通gbase数据库维保公开比选项目(第二次)比选公告
- 删除 console 语句引发的惨案
- Three. JS introductory learning notes 08:orbitcontrols JS plug-in - mouse control model rotation, zoom in, zoom out, translation, etc
- Balanced binary tree (AVL)
猜你喜欢
深度之眼(七)——矩阵的初等变换(附:数模一些模型的解释)
分步式監控平臺zabbix
保证接口数据安全的10种方案
PyTorch 中的乘法:mul()、multiply()、matmul()、mm()、mv()、dot()
谈谈 SAP iRPA Studio 创建的本地项目的云端部署问题
Application example of infinite list [uigridview]
神经网络c语言中的指针是怎么回事
Performance comparison of tidb for PostgreSQL and yugabytedb on sysbench
MySQL数据库基本操作-DQL-基本查询
Three. JS introductory learning notes 07: external model import -c4d to JSON file for web pages -fbx import
随机推荐
Bidding announcement: 2022 Yunnan Unicom gbase database maintenance public comparison and selection project (second) comparison and selection announcement
应用程序和matlab的通信方式
分步式監控平臺zabbix
Statistical learning method -- perceptron
Continuous creation depends on it!
PHP实现微信小程序人脸识别刷脸登录功能
TiDB For PostgreSQL和YugabyteDB在Sysbench上的性能对比
深度之眼(七)——矩阵的初等变换(附:数模一些模型的解释)
Communication mode between application program and MATLAB
AE learning 02: timeline
PyTorch 中的乘法:mul()、multiply()、matmul()、mm()、mv()、dot()
Notification uses full resolution
You Yuxi, coming!
PHP实现执行定时任务的几种思路详解
Three. JS introductory learning notes 05: external model import -c4d into JSON file for web pages
MySQL数据库基本操作-DQL-基本查询
通知Notification使用全解析
Limit of total fields [1000] in index has been exceeded
Migration and reprint
laravel中将session由文件保存改为数据库保存