2017-06-26 12 views
0

Http/Kernel-> sendRequestThroughRouter($ request)がリクエストのインスタンスを設定し、直ちにそれを消去した理由を知りたいと思います。Container :: clearResolvedInstanceを使用する必要がある場合

protected function sendRequestThroughRouter($request) 
{ 
    $this->app->instance('request', $request); 

    Facade::clearResolvedInstance('request'); 
... 

これを行う目的は何ですか?

答えて

0

それはコンテナに登録された後、その後、未解決のバージョンは、私の知る限り

+0

申し訳ありませんが、もう少し説明できますか? 「未解決のバージョンが消去されました」と言いますが、奇妙なことに、このメソッドは「clearResolvedInstance」と呼ばれています。あなたの答えをもう少し詳しく説明してください。ありがとう、 –

+0

私はプロではありません... https://laravel.com/docs/5.4/containerこのリンクをチェックすると、特に既存のオブジェクトがコンテナに渡されていることを明示的に示すバインディングインスタンスの部分があります。それは何をしているのは、生のHTTPリクエストを取得し、それをアプリケーションコンテナにバインドすることです。これにより、さらに下位のリクエストが$ request-> has( 'some_thing')と言うことができます... –

+0

1.リクエストオブジェクトをコンテナにバインドします。わかった。では、Facade :: clearResolvedInstance( 'request')とはまったく何ですか?どのインスタンスがクリアされますか? –

0

私は最終的にポイントを得たようだ理解していますよう払拭する広い

/** 
    * Register an existing instance as shared in the container. 
    * 
    * @param string $abstract 
    * @param mixed $instance 
    * @return void 
    */ 
    public function instance($abstract, $instance); 

registerdアプリですので:

  • ファサードは、コンテナ内の実際のサービスインスタンスへの参照を保持します
  • インスタンスが$ app-> instance()または他の手段を使用して新しいインスタンスによって配置された場合、Facade参照は以前の削除されたインスタンスをまだ指しているので廃止されます。
  • clearResolvedInstanceでfacadeインスタンス参照をクリアすると、次回ファサードが呼び出されたときに新しい参照を保存するために、resolveFacadeInstance($ name)を使用します。

私はそれを正しくしましたか?

これらresolvedInstancesを管理し、返すのポイントは何:

これは別の質問につながる

if (isset(static::$resolvedInstance[$name])) { 
     return static::$resolvedInstance[$name]; 
    } 

return static::$resolvedInstance[$name] = static::$app[$name]; 

だけではなく、常にこのようにコンテナから直接インスタンスを返す:

return static::$app[$name]; 
関連する問題