契约就是统一规范
服务就是你想要的东西,在这过程中你需要付出点什么东西
鞋子是提高速度的服务
小姐是提供服务者 服务是小姐哪种活好不好 是不是你需要花钱来买呀
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>';
}
}