Laravel 服务提供者 契约

契约就是统一规范

服务就是你想要的东西,在这过程中你需要付出点什么东西

鞋子是提高速度的服务

小姐是提供服务者 服务是小姐哪种活好不好 是不是你需要花钱来买呀

config\app.php 算然也是服务也叫做服务提供者

'providers' => [
        /*
         * Laravel Framework Service Providers...
         */
        Illuminate\Auth\AuthServiceProvider::class,
        Illuminate\Broadcasting\BroadcastServiceProvider::class,
        Illuminate\Bus\BusServiceProvider::class,
        Illuminate\Cache\CacheServiceProvider::class,
        Illuminate\Database\DatabaseServiceProvider::class,#他能给你数据库链接的服务
 ]

E:\xampp\htdocs\xampp\laravel58\vendor\laravel\framework\src\Illuminate\Database\DatabaseServiceProvider.php

在这里插入图片描述

创建服务

php artisan 去查
创建服务这提供的类

php artisan make:provider RiakServiceProvider

使用服务器提供者,需要注册
在config\app.php

'providers' => [  
 	App\Providers\RiakServiceProvider::class,
]

E:\xampp\htdocs\xampp\blog\app\Providers\RinkServicePrivoder.php
项目运行根据你这个服务,做你需要的操作,可能是监听,或者日常的写入,项目已开始就要操作的

   public function boot()
    {
        //用于启动服务  监听服务
        DB::listen(function($query){
            echo 'sql:'.$query->sql;

        });
    }

控制器 路径
E:\xampp\htdocs\xampp\blog\app\Http\Controllers\TestController.php

<?php

namespace App\Http\Controllers;

use App\Contracts\DBService;
use Illuminate\Http\Request;
use DB;
use DBFacade;
// use App\Contracts\DBContracts;

class TestController extends Controller
{
    //中间件 构造函数用的
    public function __construct()
    {
        $this->middleware('old');
    }

    public function demo()
    {
        return DB::table('tb_emp1')->get();
        #return DBFacade::index();
    }

    public function index(Request $request, $popst =1)
    {
        return 'this is testcontroller ';
    }

    public function index111($popst =1)
    {
        return 'this is testcontroller '.$popst;
    }

    public function contracts()
    {
        // 强耦合 依赖的关系
        return $this->DB->select('sss');
        // $test = new TestService;
        // return app()->select();
        // return $this->DB->select('--select --');
        // $app = new Application;
        // $object = $app->make(\Illuminate\Contracts\Console\Kernel::class);
        // return $object->select();
    }
}

在这里插入图片描述

路由

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|

*/

//#最开始调用的类 使用一个类
//use App\Utils\Demo;
//Route::get('demo', function(){
//    #如果Mysql.php切换到Orcale.php 就需要注释调呀
//    $demo = new Demo;
//    return $demo->index();
//});


#use App\Facades\DBFacade;
use App\Contracts\DBContracts;

#use DBFacade;
Route::get('dbfacade', 'TestController@demo');

#这个类(use App\Contracts\DBContracts;),当做参数传进来  这个就是参数 DBContracts $db
// Route::get('demo', function(DBContracts $db){
//     return $db->index();
Route::get('demo', function(){
        #引用这个类下的index方法
        #return DBFacade::index();
        #return $db->index();

        #return $db->index();
        #第二种调用
       # return app('dbfacade')->index();
        #dd(app('dbfacade'));
    });
//});

Route::get('user', function(){
    // $demo = new MySql;
    // return $demo->index();
    // return DBFacade::index();
    // $demo = new MySql;
    // return $demo->index();
});

Route::get('oracle', function(){
    // $demo = new MySql;
    // return $demo->index();
    // return DBFacade::index();
    // $demo = new MySql;
    // return $demo->index();
});

#路由中间件
//Route::get('demo', function(DBContracts $db){
//    return $db->index();
//})->middleware('old');


Route::get('demo', function(DBContracts $db){
    return app('dbfacade')->index();
});

//-----------------------------------------
Route::get('/', function () {
    return view('welcome');
});

Route::get('test', 'TestController@contracts');

Route::get('test', 'TestController@demo');

Route::any('/{class}-{action}',function($class, $action, App\Contracts\ControllerDispatcher $dispatcher){
    $class = 'App\\Http\\Controllers\\'.ucfirst(strtolower($class)).'Controller';
    return $dispatcher->run($class, $action);
    // if(class_exists($class))
    // {
    //     $classObject = new $class();
    //     if(method_exists($classObject, $action)) return call_user_func(array($classObject, $action));
    // } else {
    //     return $class.' connot find';
    // }
})->where(['module' => '[0-9a-z]+', 'class' => '[0-9a-z]+', 'action' => '[0-9a-z]+']);

在这里插入图片描述
开始什么服务,而不是顺序
每个服务对应一个文件夹

二、服务提供者注册 这部分是注册 register

app\Providers\RiakServiceProvider.php

$this->app[‘order’]->index(); 它获取

<?php

namespace App\Providers;
use App\Services\Order\OrderService;
use Illuminate\Support\ServiceProvider;
use DB;
class RinkServicePrivoder extends ServiceProvider
{
    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        // 定义的操作,内容
        // 在项目laravel 运行是的时候就会执行
        //
        // echo 'shineyork 老师 很棒';
        // 监听
        // echo $this->app['mysql']->index();

        echo 'hello 我是一个服务提供者';

        //用于启动服务  监听服务
        DB::listen(function($query){
            echo 'sql:'.$query->sql;
        });

        echo '你好 服务提供者<br>';
		
		#这就可以输出  在这获取
        $this->app['order']->index();
    }

    /**
     * Register services.
     * 注册用户自己定义的服务
     * @return void
     */
    public function register()
    {
		#通过标识所需要的注册服务
                            #第一个参数是标识 第二个参数是闭包
        $this->app->singleton('order',function(){ //闭包
            return new OrderService;
        });
		
		#多个
        $this->app->singleton('order.obj', OrderService::class);

        #向我们容器中注入信息           #这就是标识   这就是我们标识所对应的类
        # $this->app->singleton('dbfacade', \App\Utils\MySql::class);
        // $this->app->singleton('mysql', \App\Services\MysqlService::class);

        // 契约和实例类做一个绑定       契约的类                          实例类
        #$this->app->singleton(\App\Contracts\DBContracts::class, \App\Utils\Orcale::class);
        // \App\Utils\MySQL::class =》  \App\Utils\Oracle::class
    }
}

E:\xampp\htdocs\xampp\blog\vendor\laravel\framework\src\Illuminate\Container\Container.php
注册绑定在这块

  public function singleton($abstract, $concrete = null)
    {
        $this->bind($abstract, $concrete, true);
    }
<?php
namespace App\Services\Order;

//use App\Contracts\DBService;
/**
 *
 */
class OrderService
{
    public function index()
    {
        echo  'this is  serivecs test OracleService<br>';
    }
}

在这里插入图片描述

也可以在控制器下获取 app(‘order’)->index();

app\Providers\RiakServiceProvider.php

    public function register()
    {
        //用于注册服务
        //bind singleton
        #第一个参数标识  就是别名
        #第二个参数服务的内容
        $this->app->singleton('order',function(){ //闭包
            return new OrderService;
        });

        $this->app->singleton('order.obj', OrderService::class);

        #第一个参数是对象
        #第二个参数是绑定的实例类
       # $this->app->singleton(\App\Contracts\Order\OrderService::class, OrderService::class);
    }

控制器输出
E:\xampp\htdocs\xampp\blog\app\Http\Controllers\TestController.php

<?php

namespace App\Http\Controllers;

use App\Contracts\DBService;
use Illuminate\Http\Request;
use DB;
use DBFacade;
// use App\Contracts\DBContracts;

class TestController extends Controller
{
    //中间件 构造函数用的
    public function __construct()
    {
        $this->middleware('old');
    }

    public function demo()
    {
        app('order')->index();
        dd(DB::table('tb_emp1')->get());
        #return DB::table('tb_emp1')->get();
        #return DBFacade::index();
    }

    public function index(Request $request, $popst =1)
    {
        return 'this is testcontroller ';
    }

    public function index111($popst =1)
    {
        return 'this is testcontroller '.$popst;
    }

    public function contracts()
    {
        // 强耦合 依赖的关系
        return $this->DB->select('sss');
        // $test = new TestService;
        // return app()->select();
        // return $this->DB->select('--select --');
        // $app = new Application;
        // $object = $app->make(\Illuminate\Contracts\Console\Kernel::class);
        // return $object->select();
    }
}

在这里插入图片描述

三、服务提供者和契约类绑定怎么用

控制器

<?php

namespace App\Http\Controllers;

use App\Contracts\DBService;
use Illuminate\Http\Request;
use DB;
use DBFacade;
#引入契约类
use App\Contracts\Order\OrderService;
// use App\Contracts\DBContracts;

class TestController extends Controller
{
    //中间件 构造函数用的
    public function __construct()
    {
        $this->middleware('old');
    }

    public function demo(OrderService $order)
    {
        $order->index();
        echo "123<br>";
        dd(DB::table('tb_emp1')->get());
        #return DB::table('tb_emp1')->get();
        #return DBFacade::index();
    }

    public function index(Request $request, $popst =1)
    {
        return 'this is testcontroller ';
    }

    public function index111($popst =1)
    {
        return 'this is testcontroller '.$popst;
    }

    public function contracts()
    {
        // 强耦合 依赖的关系
        return $this->DB->select('sss');
        // $test = new TestService;
        // return app()->select();
        // return $this->DB->select('--select --');
        // $app = new Application;
        // $object = $app->make(\Illuminate\Contracts\Console\Kernel::class);
        // return $object->select();
    }
}

提供服务者和契约如何绑定使用

<?php

namespace App\Providers;
use App\Services\Order\OrderService;
use Illuminate\Support\ServiceProvider;
use DB;
class RinkServicePrivoder extends ServiceProvider
{
    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        // 定义的操作,内容
        // 在项目laravel 运行是的时候就会执行
        //
        // echo 'shineyork 老师 很棒';
        // 监听
        // echo $this->app['mysql']->index();

        echo 'hello 我是一个服务提供者';

        //用于启动服务  监听服务
        DB::listen(function($query){
            echo 'sql:'.$query->sql;
        });

        echo '你好 服务提供者<br>';

       # $this->app['order']->index();
    }

    /**
     * Register services.
     * 注册用户自己定义的服务
     * @return void
     */
    public function register()
    {

                            #第一个参数是标识 第二个参数是闭包
        $this->app->singleton('order',function(){ //闭包
            return new OrderService;
        });


        $this->app->singleton('order.obj', OrderService::class);
		#契约对服务的绑定
        #第一个参数是契约绑定的对象
        #绑定我们的实例类
        $this->app->singleton(\App\Contracts\Order\OrderService::class,OrderService::class);



        #向我们容器中注入信息           #这就是标识   这就是我们标识所对应的类
        # $this->app->singleton('dbfacade', \App\Utils\MySql::class);
        // $this->app->singleton('mysql', \App\Services\MysqlService::class);

        // 契约和实例类做一个绑定       契约的类                          实例类
        #$this->app->singleton(\App\Contracts\DBContracts::class, \App\Utils\Orcale::class);
        // \App\Utils\MySQL::class =》  \App\Utils\Oracle::class
    }
}

创建接口

<?php
namespace App\Contracts\Order;
/**
 *
 */
interface OrderService
{
    public function index();
}

在这里插入图片描述

<?php
namespace App\Services\Order;

use App\Contracts\Order\OrderService as Contracts;
/**
 *
 */
class OrderService implements Contracts
{
    public function index()
    {
        echo  'this is  serivecs test OracleService<br>';
    }
}

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伟伟哦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值