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

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

从某种意义上说,服务提供者有点类似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.net/113202.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • getAttribute() 与 attr() 的区别

    getAttribute() 与 attr() 的区别

    2021年10月31日
  • LINUX下tar.bz2包的安装方法

    LINUX下tar.bz2包的安装方法声明:个人觉得文章不错,所以转载过来分享以及自己收藏,只是原出处已经无法查明,只能附上我见文章的地址:http://forum.ubuntu.org.cn/viewtopic.php?t=156932大多以tar.gz和tar.bz2打包软件,大多是通过./configure;make;makeinstall来安装的;有的软件是直接make;makeinstall

    2022年6月5日
  • 国内十大正规现货交易平台排名(2022最新榜单)「建议收藏」

    国内十大正规现货交易平台排名(2022最新榜单)「建议收藏」如今,越来越多的人投资于黄金,因为这些投资项目更适合当今年轻人的需求,但为了通过黄金投资获得理想的回报,我们首先需要选择一个可靠的国内黄金交易平台,由于市场上的各种平台都很复杂,有些平台可能不是很正规。如果你选择这样的一个平台投资,收获可能会并不理想,但选择好的平台事实上并不像预期的那么困难。香港作为全球的金融中心之一,其金银业贸易场的黄金投资业务已经很成熟,投资者的利益能够得到有效的保障。鉴于很多新手对国内现货黄金平台不太了解,下面小编为大家介绍“国内十大正规现货交易平台排名(2022最新

    2022年6月29日
  • java json 根据 key排序[通俗易懂]

    java json 根据 key排序[通俗易懂]阿里的JsonObject内部是用Hashmap来存储的,所以输出是按key的排序来的,如果要让JsonObject按固定顺序(put的顺序)排列,可以修改JsonObject的定义HashMap改为LinkedHashMap。publicJSONObject(){this.map=newLinkedHashMap();//newHashMap();…

    2022年9月8日
  • c#使用SerialPort串口控件

    c#使用SerialPort串口控件

    2021年6月5日
  • ESXI洗白安装黑群晖教程,附文件「建议收藏」

    ESXI洗白安装黑群晖教程,附文件「建议收藏」本教程旨在体验群晖的功能,建议您购买正版群晖。————————————————–分割线————————————————–所需文件下载地址:链接:https://pan.baidu.com/s/1YiUGNoghLd_kRoS7BecAwA提取码:w3pj————————————————–分割线-

    2022年6月13日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号