Laravel请求输入()或get()

Yad*_*ada 34 php laravel laravel-5

使用Laravel 5,看起来Request对象的方法注入优于使用Request facade.

<?php namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HomeController extends Controller
{
    public function index(Request $request)
    {
        $email = $request->input('email');

        // OR

        $email = $request->get('email');
    }
}
Run Code Online (Sandbox Code Playgroud)

我有几个问题:

使用Illuminate\Http\Request比使用更好Illuminate\Support\Facades\Request

我不知道如何$请求- > get()方法被解决,因为没有函数名get()在Illuminate\Http\Request.input()和get()做同样的事情.

方法注入比使用Facades更好吗?

Max*_*nin 37

在控制器方法中,请求注入功能始终是可取的,因为在某些方法中,它可以帮助您使用表单请求(它们正在扩展默认的Request类)验证,这将在进入实际控制器方法之前自动验证您的请求.这是一个很棒的功能,有助于创建纤薄和干净的控制器代码.

使用默认的请求注入使控制器的方法类似且更易于维护.

对象注入总是比Facades更好,因为这样的方法和对象更容易测试.

get()并且input()是不同类的方法.第一个是Symfony HttpFoundation Request input()的方法,是一个扩展Symfony Request类的Laravel Request类的方法.

  • 使用`input`,您可以使用点符号来访问嵌套数据`$ name = $ request-> input('products.0.name');`不适用于`get`我相信. (8认同)
  • 很好的答案.我个人更喜欢`input()`而且我认为`get()`是正式的首选.我特别喜欢它,因为它避免了与'GET`和`POST`输入数据的混淆.(在早期版本中,这是一个很大的问题,你有`Input :: get()`) (2认同)
  • `::get()` 肯定令人困惑,因为它同时检查 GET 和 POST 变量。正如 max 所指出的,使用 `Request` 类可以让您非常快速地将其交换到您自己的 Request 对象中,例如验证请求。 (2认同)