laravel 门面

路径:
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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

伟伟哦

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

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

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

打赏作者

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

抵扣说明:

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

余额充值