Laravel Facades 理解

laravel facade 在官方文档中定义为应用的 服务容器 提供了一个「静态」 接口。
说实话我理解起来有点难懂,初步看这不就是静态方法吗?

image.png

上图中并不是一个静态方法,通过laravel facade 就可以用静态方法的方式去访问。

//在App\Services新建一个Test类
<?php
namespace App\Services;

class Test {

    public function dosomething(){
        echo "this is test class ...";
    }
}
//在App\Facades 建一个指向Test类的门面类 TestClass
//该类继承自 Illuminate\Support\Facades\Facade 类,
//并且定义了getFacadeAccessor() 方法。这个方法的作用是返回服务容器绑定的名称
//返回test,指向服务容器绑定的名称
<?php
namespace App\Facades;

use Illuminate\Support\Facades\Facade;

class TestClass extends Facade {

    protected static function getFacadeAccessor()
    {
       return 'test';
    }
}
//App\Providers\AppServiceProvider.php 注册容器,注意容器名称
 public function register()
    {
        //
        $this->app->singleton('test', function () {
            return new \App\Services\Test();
        });
    }

在控制器中通过静态方式去访问

public function index(){
       
        TestClass::dosomething();
    }
image.png

如果你不想写use 根目录的类名,例如

use App\Facades\TestClass;

可以在config/app.php 中aliases定义别名

'aliases' => [
        ......
        'TestClass' => App\Facades\TestClass::class,

    ],

回到控制器中


image.png

image.png

结果也是一样
好了,现在就比较通俗易懂了。Facades就是将类中非静态方法通过静态方式去访问,很多第三方扩展包,安装进来就已经配置Facade通过静态方式去访问

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。