laravel-自定义facades(门面)

参考资料

laravel学院
链接
0.在在app下建立Utils文件夹
<?php

namespace App\Utils;

class Test
{
    public function sendMessage()
    {
        return '我是一个测试的facades';
    }
}

1.在app下建立Facades文件夹
中建立Test.php

<?php

namespace App\Facades;

use Illuminate\Support\Facades\Facade;

class Test extends Facade #继承Facade
{
    public static function getFacadeAccessor()#重写里面的getFacadeAccessor方法
    {
        return 'test';  #自定义返回后面需要调用
    }
}

2.在命令行中定义服务

# 此命令会在 app\Providers中生成TestServiceProvider.php
php artisan make:provider TestServiceProvider

在TestServiceProvider.php中注册服务

<?php

namespace App\Providers;


use App\Utils\Test;
use Illuminate\Support\ServiceProvider;

class TestServiceProvider extends ServiceProvider
{
    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        //第一个bind方法表示每一次都需要实例化
       // $this->app->bind('test',function (){
       //     return new Test();
       // });
    #singleton表示注册一次就可以下次可以接着使用
       $this->app->singleton('test',function (){
            return new Test();
        });
    }

    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }
}

3.接着在config\app.php中注册

providers数组中注册

App\Providers\TestServiceProvider::class,

aliases中注册

'Test'=>App\Facades\Test::class,

在控制器中使用

# 返回结果我是一个测试的facades 注:这里如果sendMessage不自动提示需要借助ide_helper包生成 php artisan ide-helper:generate(不解释)
return Test::sendMessage();
posted @ 2021-01-04 18:40  以己为镜  阅读(495)  评论(0编辑  收藏  举报