zoukankan      html  css  js  c++  java
  • Laravel 服务提供者实例教程 —— 创建 Service Provider 测试实例

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

    既然这么重要,那么如何在自己的Laravel应用中定义和使用服务提供者呢?

    1、定义服务类

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

    定义TestContract如下:

    <?php
    
    namespace AppContracts;
    
    interface TestContract
    {
        public function callMe($controller);
    }
    

    定义TestService如下:

    <?php
    
    namespace AppServices;
    
    use AppContractsTestContract;
    
    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 AppProviders;
    
    use IlluminateSupportServiceProvider;
    use AppServicesTestService;
    
    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('AppContractsTestContract',function(){
                return new TestService();
            });
        }
    }
    

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

    3、注册服务提供者

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

    'providers' => [
    
        //其他服务提供者
    
        AppProvidersTestServiceProvider::class,
    ],
    

    4、测试服务提供者

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

    php artisan make:controller TestController
    

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

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

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

    <?php
    
    namespace AppHttpControllers;
    
    use IlluminateHttpRequest;
    
    use AppHttpRequests;
    use AppHttpControllersController;
    
    use App;
    use AppContractsTestContract;
    
    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服务提供者还支持延迟加载,具体可参考服务提供者文档

  • 相关阅读:
    深入浅出之正则表达式(一)
    Windows平台下构建 Android 开发环境( Android SDK 下载及安装教程)
    Eclipse 安装配置总结
    JDK安装配置教程
    关于磁力链接(Magnet URI)的简单介绍
    C# ASP.NET里的@妙用,字符串换行
    颜色中英文对照表 CSS
    使用git 工具下载android.jar Source Code
    ASP.NET表单提交之Get和Post的区别
    深入浅出之正则表达式(二)
  • 原文地址:https://www.cnblogs.com/lxwphp/p/9167322.html
Copyright © 2011-2022 走看看