Laravel 输入外观与请求外观

Laravel Input Facade vs Request Facade

基于 Input Facade API and Request Facade API,Input::get() 方法似乎是唯一的区别。我在这里遗漏了什么吗?

我知道验证可以应用于请求,但我不确定输入外观是否也是如此。

是的,两个 Facade 非常相似。这样做的原因是底层 class 是相同的 (Illuminate\Http\Request)。您可以通过查看 Facade classes 及其访问器来了解这一点:

Illuminate\Support\Facades\Input

protected static function getFacadeAccessor()
{
    return 'request';
}

Illuminate\Support\Facades\Request

protected static function getFacadeAccessor()
{
    return 'request';
}

如您所知,一个区别是 Input::get() 方法。这只是直接在 Facade 中“翻译”为 Request::input()

public static function get($key = null, $default = null)
{
    return static::$app['request']->input($key, $default);
}

结论

它们本质上是一样的。这意味着,无需更改现有代码。但是,如果您愿意,这不会有任何区别。

编写新代码时,你应该使用 Request 门面,并且可能使用 Request::input(...) 而不是 Request::get(...)(因为前者支持点符号来访问嵌套数据,如 $name = $request->input('products.0.name');,但公平地说 get 快了一点)。

Input is mentioned nowhere in the documentation for 5.0. It's not (officially) deprecated but the use of Request is encouraged.

我也非常喜欢 Request 的是 Facade 实际上具有底层 class 的名称。这样就很清楚你在处理什么。然而,这也可能是错误的根源。如果您使用 Request::input('name') 之类的东西,请确保使用 use Request;use Illuminate\Support\Facades\Request 而不是 use Illuminate\Http\Request 导入 Facade。相反的情况适用于依赖注入。