Laravel Custom Facade新实例

时间:2016-10-28 13:40:48

标签: laravel ioc-container laravel-5.3

使用我的第一个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"返回一个新的类实例?

1 个答案:

答案 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();

希望这有帮助!