2 回答
TA贡献1831条经验 获得超4个赞
TA贡献1813条经验 获得超2个赞
我不会详细介绍,但这是对在 laravel 中使用外观时幕后发生的事情的简单解释。
假设您使用一些公共方法定义了一个自定义类:
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"
- 2 回答
- 0 关注
- 93 浏览
添加回答
举报