在Request中访问参数

时间:2016-07-31 00:14:11

标签: laravel laravel-5 request httprequest

我有一个关于从Request对象获取参数的问题。

之间有什么区别
$name = $request->name;

OR

$name = $request->input("name");

他们表现出相同的行为。我要求从打字的角度来看,利用#1方法更快。但我不知道其中的区别。 #1是否容易进行SQL注入?

1 个答案:

答案 0 :(得分:2)

基本上,第一种情况只是第二种情况的语法糖。在Laravel中,Request实现了__get magic函数来访问其内部属性。

public function all()
{
    return array_replace_recursive($this->input(), $this->allFiles());
}

public function __get($key)
{
    $all = $this->all();

    if (array_key_exists($key, $all)) {
        return $all[$key];
    } else {
        return $this->route($key);
    }
}

在第一种情况下,如果上传了任何文件,Laravel首先会在其中查找属性。如果在文件或输入中没有这样的参数,在第一个片段中,Laravel还会在路由参数中查找值:

要保护代码免受SQL注入,您必须使用预准备语句/查询构建器/ ORM。您不应该转义/更改输入,因此这两个函数都不能保护您免受SQL注入。