2017-03-14 10 views
0

私はユーザーから聞いた現在のパスを取得しようとしていました。

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use Illuminate\Support\Facades\Route; 
use GuzzleHttp\Client; 

class TestController extends Controller 
{ 
    public function reqTest1(Request $req) { 
     dd($req->path()); 
    } 
    public function reqTest2() { 
     dd(Request::path()); 
    } 
} 

reqTest1が良い動作しますが、私は、関数の内部Request objectを注入しなければならなかった: はdoc後、私は、これらの2つの方法を作成しました。そこではpath()メソッドをつかむことができ、私は期待どおりの応答を持っています。

しかし、私はに依存しないようにしてください。私は同じメソッドを静的クラスのRequestだけを呼び出すことができます。 (知りません)。

私は、これらの2つのシナリオで同じ方法を使用できないことを認識しています。

注射したオブジェクトのメソッドの一覧は、Requestクラスのために、同じオブジェクトを生成する静的クラスよりもはるかに大きい..です

それでは、なぜRequestクラスは、依存関係によって作成されたリクエスト・オブジェクトからさまざまな方法があります注入?

答えて

0

Laravelファサードは、コンテナ内部のサービスに静的なインターフェイスを提供するクラスです。つまり、リクエストファサードで静的に呼び出すすべてのメソッドが実際のリクエストオブジェクトに再ルーティングされます。 これは、リクエストファサードがメソッド自体がほとんどないオブジェクトである理由です。

あなたは、この行のコードの変更にファサードを呼び出したい場合:

dd(Request::path()); 

これまで:

dd(\Request::path()); 

かが点灯上の静的なパス()関数を呼び出している\のHttp \リクエストファサードではなく、この行の原因をリクエストしてください:

use Illuminate\Http\Request; 

IMHOヘルパー関数のリクエストを使用する方が良い\ Requestファサードの代わりにst()を使用します。

関連する問題