路径:
E:\xampp\htdocs\xampp\blog\vendor\laravel\framework\src\Illuminate\Support\Facades\Facade.php
中间者:瓜子二手车
是门面
用户 瓜子二手车app 车
public function register()
{
#向我们容器中注入信息 #这就是标识 这就是我们标识所对应的类
$this->app->singleton('dbfacade', \App\Utils\Orcale::class);
// $this->app->singleton('mysql', \App\Services\MysqlService::class);
// 契约和实例类绑定
$this->app->singleton(
\App\Contracts\DBContracts::class, \App\Utils\MySQL::class
);
// \App\Utils\MySQL::class =》 \App\Utils\Oracle::class
}
大的项目中
app\Facades
路径 E:\xampp\htdocs\xampp\blog\app\Facades\DBFacade.php
<?php
namespace App\Facades;
#继承门面
use Illuminate\Support\Facades\Facade;
/**
*
*/
class DBFacade extends Facade
{
#需要重写这个方法 用户要什么类型的车 可能会要玛莎拉蒂还是法拉利
protected static function getFacadeAccessor()
{
// return \App\Contracts\DBContracts::class;
#return 'dbfacade';
#return \App\Utils\Orcale::class;
return \App\Utils\MySql::class; #对象的地址
// throw new RuntimeException('Facade does not implement getFacadeAccessor method.');
}
}
路径E:\xampp\htdocs\xampp\blog\app\Utils\MySql.php
<?php
namespace App\Utils;
use App\Contracts\DBContracts;
/**
*
*/
class MySql implements DBContracts
{
public function index()
{
return 'dfsajfksajfklsafjk';
}
}
路径: E:\xampp\htdocs\xampp\blog\routes\web.php
<?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');
#Route::get('demo', function(DBContracts $db){
Route::get('demo', function(){
#引用这个类
return DBFacade::index();
#return $db->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('/', function () {
return view('welcome');
});
Route::get('test', 'TestController@contracts');
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]+']);
门脸的进阶
需要控制器的配合
使用服务提供者
E:\xampp\htdocs\xampp\blog\app\Providers\RinkServicePrivoder.php
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class RinkServicePrivoder extends ServiceProvider
{
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
// 定义的操作,内容
// 在项目laravel 运行是的时候就会执行
//
// echo 'shineyork 老师 很棒';
// 监听
// echo $this->app['mysql']->index();
}
/**
* Register services.
* 注册用户自己定义的服务
* @return void
*/
public function register()
{
#向我们容器中注入信息 #这就是标识 这就是我们标识所对应的类
$this->app->singleton('dbfacade', \App\Utils\Orcale::class);
// $this->app->singleton('mysql', \App\Services\MysqlService::class);
// 契约和实例类绑定
#$this->app->singleton(\App\Contracts\DBContracts::class, \App\Utils\MySQL::class);
// \App\Utils\MySQL::class =》 \App\Utils\Oracle::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()
{
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\Facades;
#继承门面
use Illuminate\Support\Facades\Facade;
/**
*
*/
class DBFacade extends Facade
{
#需要重写这个方法 用户要什么类型的车 可能会要玛莎拉蒂还是法拉利
protected static function getFacadeAccessor()
{
// return \App\Contracts\DBContracts::class;
#标识
return 'dbfacade';
#return \App\Utils\Orcale::class;
#return \App\Utils\MySql::class;
// throw new RuntimeException('Facade does not implement getFacadeAccessor method.');
}
}
路由
<?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');
#Route::get('demo', function(DBContracts $db){
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('/', function () {
return view('welcome');
});
Route::get('test', 'TestController@contracts');
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]+']);
加载的信息有关系
vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php