为什么"请求::" (请求静态类)给了我与$ resquest->不同的方法。 (请求对象)在Laravel 5.4中?

时间:2017-03-14 17:58:50

标签: laravel dependency-injection

我试图抓住用户提出的当前路径。 在doc之后我创建了这两种方法:

<?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。在那里我可以获取path()方法,并且我有预期的响应。

但是,如果我不想注入依赖项,我应该能够获得相同的方法只调用静态类Request。 (我不知道)。

我只是意识到在这两种情况下我们没有相同的方法。

对于Request类,注入对象的方法列表比生成相同对象的静态类大得多。

那么,为什么Request类与依赖注入创建的Request对象有不同的方法?

1 个答案:

答案 0 :(得分:0)

Laravel facade是一个类,它为容器内的服务提供类似静态的接口,即在请求外观上静态调用的每个方法都被重新路由到实际的请求对象。 这就是Request facade本身就是一个方法很少的对象的原因。

如果要在代码中调用外观,请更改以下行:

dd(Request::path());

到此:

dd(\Request::path());

或者您正在调用Illuminate \ Http \ Request上的静态路径()函数而不是Request facade,原因是:

use Illuminate\Http\Request;

恕我直言,最好使用辅助函数request()而不是\ Request facade。