Я не буду вдаваться в подробности, но это простое объяснение того, что скрывается за кадром, когда вы используете фасады в laravel.
Предположим, вы определили пользовательский класс с некоторыми публикациями c методы:
namespace Test;
class Foo
{
public function test()
{
return 'test';
}
}
Затем вам нужно определить фасад для этого класса:
namespace Test1;
class BarFacade
{
// In laravel this is called in the Facade abstract class but it is actually implemented
// by all the facades you add across the application
public static function getFacadeAccessor()
{
// In laravel you can also return a string which means that the object
// will be retrieved from the container.
return new \Test\Foo();
}
// In laravel this method is defined in the Facade abstract class
public static function __callStatic($method, $args)
{
$object = self::getFacadeAccessor();
return call_user_func_array([$object, $method], $args);
}
}
Затем вы должны определить псевдоним в массиве $aliases
config.app
файл. Эти псевдонимы анализируются с помощью laravel и регистрируются с использованием встроенной функции php class_alias (см. Illuminate / Foundation / AliasLoader. php)
class_alias('Test\Foo', 'BarFacade', true);
// You can also create an alias for the facade itself
class_alias('Test1\BarFacade', 'FooBar', true);
Затем вы можете просто назовите фасады: \
var_dump(BarFacade::test());
var_dump(\Test1\BarFacade::test());
var_dump(\FooBar::test());
Результаты, очевидно, будут:
string(4) "test"
string(4) "test"
string(4) "test"