设为首页 加入收藏

TOP

laravel5.5源码笔记(三、门面类facade)(二)
2019-08-23 00:33:25 】 浏览:63
Tags:laravel5.5 源码 笔记 门面 facade
ub(
$alias, file_get_contents(__DIR__.'/stubs/facade.stub') )); return $path; }

 由于laravel中composer的执行过程过于繁琐,这里就不做深究了。原理是一样的,通过别名找到命名空间的类名,再由composer的类名与文件路径映射关系,自动加载函数找到相应文件加载进来。

 

那么我们来自定义一个门面类试一下

1、新建一个facade类,这里返回的test是上一篇博客中定义的对象

namespace App\Facades;

use Illuminate\Support\Facades\Facade;

class Test extends Facade
{
    protected static function getFacadeAccessor()
    {
        return 'App\Contracts\Test';
    }
}

2、将它添加到config/app.php的aliases别名数组中

'aliases' => [

        'App' => Illuminate\Support\Facades\App::class,
        'Artisan' => Illuminate\Support\Facades\Artisan::class,
        'Auth' => Illuminate\Support\Facades\Auth::class,
        'Blade' => Illuminate\Support\Facades\Blade::class,
        'Broadcast' => Illuminate\Support\Facades\Broadcast::class,
        'Bus' => Illuminate\Support\Facades\Bus::class,
        'Cache' => Illuminate\Support\Facades\Cache::class,
        'Config' => Illuminate\Support\Facades\Config::class,
        'Cookie' => Illuminate\Support\Facades\Cookie::class,
        'Crypt' => Illuminate\Support\Facades\Crypt::class,
        'DB' => Illuminate\Support\Facades\DB::class,
        'Eloquent' => Illuminate\Database\Eloquent\Model::class,
        'Event' => Illuminate\Support\Facades\Event::class,
        'File' => Illuminate\Support\Facades\File::class,
        'Gate' => Illuminate\Support\Facades\Gate::class,
        'Hash' => Illuminate\Support\Facades\Hash::class,
        'Lang' => Illuminate\Support\Facades\Lang::class,
        'Log' => Illuminate\Support\Facades\Log::class,
        'Mail' => Illuminate\Support\Facades\Mail::class,
        'Notification' => Illuminate\Support\Facades\Notification::class,
        'Password' => Illuminate\Support\Facades\Password::class,
        'Queue' => Illuminate\Support\Facades\Queue::class,
        'Redirect' => Illuminate\Support\Facades\Redirect::class,
        'Redis' => Illuminate\Support\Facades\Redis::class,
        'Request' => Illuminate\Support\Facades\Request::class,
        'Response' => Illuminate\Support\Facades\Response::class,
        'Route' => Illuminate\Support\Facades\Route::class,
        'Schema' => Illuminate\Support\Facades\Schema::class,
        'Session' => Illuminate\Support\Facades\Session::class,
        'Storage' => Illuminate\Support\Facades\Storage::class,
        'URL' => Illuminate\Support\Facades\URL::class,
        'Validator' => Illuminate\Support\Facades\Validator::class,
        'View' => Illuminate\Support\Facades\View::class,
        //刚刚新建的facades
        'Test' => \App\Facades\Test::class,
    ],

3、在路由文件中调用它

Route::any('/index', function (){
    Test::doing();
});

我们会发现,即使我们没有通过app对象进行make也没有任何命名空间的引入,它就这样被调用了。

如果是在类中调用,那么就要麻烦一些了,需要ues这个别名,注意这一点

namespace App\Http\Controllers;

use Illuminate\Http\Request;
//use App\Contracts\Test;
//注意这里只引入了别名,由于命名空间冲突,所以我注释了其他部分
use Test;

class IndexController extends Controller
{
//    public function __construct(Test $test)
//    {
//        $this->test = $test;
//    }

    public function index(Test $test)
    {
        Test::doing();
//        app()->make('App\Contracts\Test')->doing();
//        echo '<br>';
//
//        //只有通过构造方法进行自动加载依赖的方式才能触发契约的when绑定
//        $this->test->doing();
//
//        echo '<br>';
//        //因为larave
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Laravel系列之环境搭建 — Virtua.. 下一篇[日常] HTTP协议状态码

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目