使用我的第一个laravel软件包并遇到Facade如何工作的问题,目前我的使用看起来像这样:
{!! Custom::showValue() !}} //returns "default"
{!! Custom::setValue('test')->showValue() !}} //returns "test"
{!! Custom::showValue() !}} //returns "test"
我希望最后一个元素成为一个新的类实例,因为我在设置服务提供者时使用了bind而不是singleton:
public function register()
{
$this->registerCustom();
}
public function registerCustom(){
$this->app->bind('custom',function() {
return new Custom();
});
}
我需要做些什么才能做到这一点,所以每个门面都要调用" Custom"返回一个新的类实例?
答案 0 :(得分:2)
正如@ maiorano84所提到的那样,你不能用Facades
开箱即用。
要回答您的问题,要让Custom
外观返回一个新实例,您可以添加以下方法:
/**
* Resolve a new instance for the facade
*
* @return mixed
*/
public static function refresh()
{
static::clearResolvedInstance(static::getFacadeAccessor());
return static::getFacadeRoot();
}
然后你可以打电话:
Custom::refresh()->showValue();
(显然,如果你愿意,你可以给refresh
别的东西打电话)
另一种替代方法是使用Laravel附带的app()
全局函数来解析一个新实例,即
app('custom')->showValue();
希望这有帮助!