Laravel Facades 每个个体的全局 Facade class?

Laravel Facades global Facade for each individual class?

Facades 的概念对我来说是新事物,Laravel 用来组织它的结构似乎过于混乱。

app    
└───Facades
│   │   Facade.php
│   │
│   └───Classes
│       │   Facade.php
│       │

app/Facades/Facade.php

<?php
namespace App\Facades;

use Illuminate\Support\Facades\Facade;

class Facade extends Facade
{
    protected static function getFacadeAccessor() {
        return 'Facade';
    }
}

app/Facades/Classes/Facade.php

<?php

namespace App\Facades\Classes;

use Illuminate\Support\Facades\Facade;

class Facade extends Facade
{
    // Logic Here
}

我想做的是将这两个结合在一起,所以我只有 app/Facades 中的文件,但似乎没有办法做到这一点,因为 Laravel 依赖于显示的结构。

是否有任何选项可以将其放入单个文件中,这样我就不会出现大量重复?

当您使用 class' 命名空间时,您可以在前面添加 Facades。例如,假设您有一个 Foo class:

// app/Foo.php

namespace App;

class Foo
{
    public function bar() : string
    {
        return 'Hello world!';
    }
}

然后您可以在您的控制器中执行此操作:


namespace App\Http\Controllers;

use Facades\App\Foo;

class TestController
{
    public function __invoke() : void
    {
        echo Foo::bar(); // Hello world!
    }
}

使用这种方法,您不需要 "duplicate" 您的文件。

有关实时立面的更多信息:https://laravel.com/docs/5.8/facades#real-time-facades