2016-10-28 2 views
1

私の最初のlaravelパッケージでの作業と私のファサードがどのように動作するかとのトラブルに実行して、現在、私の使用は、このようになりますLaravelカスタムファサード新しいインスタンスが

public function register() 
    { 
     $this->registerCustom(); 
    } 

public function registerCustom(){ 
    $this->app->bind('custom',function() { 
     return new Custom(); 
    }); 
} 

は、私はそれがとても「カスタム」へのすべてのファサードの呼び出しは、新しいクラスのインスタンスを返し作るために行う必要がある何か他のものがあります:私のサービスプロバイダを設定するとき、私は代わりにシングルトンのバインドを使用していたように、クラスのインスタンス、 ?

+1

これはLaravelのFacadesの仕組みではありません。ファサードは、静的アクセスを使用して単一インスタンスのパブリックメソッドにアクセスできるようにする構文上の砂糖です。基になるクラス(または実際のFactoryクラス)に公開されたファクトリメソッドを公開するか、Dependency Injectionを使用して目的のものを実現することを検討してください。 – maiorano84

答えて

2

@ maiorano84と記載されているので、Facadesのままでこの操作を行うことはできません。

/** 
* Resolve a new instance for the facade 
* 
* @return mixed 
*/ 
public static function refresh() 
{ 
    static::clearResolvedInstance(static::getFacadeAccessor()); 

    return static::getFacadeRoot(); 
} 

次にあなたが呼び出すことができます:

Custom::refresh()->showValue(); 

(もちろん、あなたがあなたのCustomファサードは、あなたがそれに次のメソッドを追加することができ、新たなインスタンスを返す作るために、あなたの質問に答えるために

あなたが望むならばrefreshに電話することができます)

これに代わる1つの方法は、app()グローバル新しいインスタンスを解決するためにLaravelに付属する関数です。つまり、

app('custom')->showValue(); 

希望します。

+0

私のクラスでURLを扱ってくれてありがとう、ロスさんに感謝します。新しい$ class = new staticだけで始まるurl()メソッドから始めて、同じことをやってしまいました。それから走っています。 getFacadeRootは、 – kilrizzy

関連する問題