> For the complete documentation index, see [llms.txt](https://liseen315.gitbook.io/laravel/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://liseen315.gitbook.io/laravel/qing-qiu-xiang-ying-he-zhong-jian-jian/qing-qiu-dui-xiang/huo-qu-qing-qiu-de-ji-ben-xin-xi.md).

# 获取请求的基本信息

既然您知道了如何获取请求实例，那么您可以用它做什么呢？请求对象的主要目的是表示当前的HTTP请求，因此请求类提供的主要功能是方便获取有关当前请求的有用信息。

我已经对这里描述的方法进行了分类，但请注意，类别之间肯定存在重叠，并且类别有点随意，希望这些类别可以让您轻松了解可用的内容，随后你就可以抛弃这些分类了。

另外，请注意，请求对象上还有许多可用的方法；这些方法只是最常用的方法

**基础用户输入**

基础用户输入使得通过表单提交或者Ajax请求获取信息变得简单，当我引用"用户的输入"时，我讨论的是查询参数(GET)，表单提交(POST)或者是JSON，基础的用户输入包含以下：

*all()*

将用户提供的所有输入作为数组返回。

*input(fieldName)*

返回用户输入的单个字段

*only(fieldName|\[array,of,field,names])*

返回用户特定输入字段作为数组返回

*except(fieldName|\[array,of,field,names])*

返回排除后的输入

*exists(fieldName)*

返回一个布尔值，指示输入中是否存在该字段。has()是别名

*filled(fieldName)*\
\
返回一个布尔值，指示该字段是否存在于输入中且不为空（即具有值）。

*json()*

如果页面发送了JSON，则返回参数包。

json(keyName)

从发送到页面的JSON返回给定键的值.

> ParameterBag
>
> 在Laravel中，有时会遇到ParameterBag对象。这个类有点像一个关联数组。您可以使用get()获取特定的key.

> echo $bag->get('name');
>
> 您还可以使用has()来检查键的存在，使用all()来获取所有键和值的数组，使用count()来计算数量，使用keys()来获取键对应的数组

示例10-3展示如何在请求方法上使用用户提供的信息

{% code title="Example 10-3. Getting basic user-provided information from the request" %}

```php
// form
<form method="POST" action="/form"> 
    @csrf
    <input name="name"> Name<br>
    <input type="submit"> 
</form>
// Route receiving the form
Route::post('form', function (Request $request) {
    echo 'name is ' . $request->input('name') . '<br>';
    echo 'all input is ' . print_r($request->all()) . '<br>';
    echo 'user provided email address: ' . $request->has('email') ? 'true' : 'false';
});
```

{% endcode %}

**用户和请求状态**

用户和请求状态方法包括用户未通过表单明确提供的输入

*method()*

返回通过路由的方法(GET,POST,PATCH等等)

*path()*

返回不带域的页面路径，例如,[http://www.myapp.com/abc/de](http://www.myapp.com/abc/def)会返回/abc/de

*url()*

返回带域的页面路径，例如[http://www.myapp.com/abc](http://www.myapp.com/abc/def) 会返回 [http://www.myapp.com/abc](http://www.myapp.com/abc/def)

*is()*

返回一个布尔值，指示当前页面请求是否与提供的字符串匹配（例如，/a/b/c将匹配$ $request- >is('\**b\**')，其中\*代表任何字符） ; 在Str::is()中使用自定义正则表达式解析器

*ip()*

返回用户ip地址

*header()*

返回头数组(例如，\['accept-language' => \['en- US,en;q=0.8']])，或者，如果将头名称作为参数传递，则仅返回该头。

*server()*

返回传统上存储在$ \_SERVER中的变量数组(例如，REMOTE\_ADDR)，或者传递一个$\_SERVER变量则返回其值。

*secure()*

返回一个布尔值，该值指示此页是否使用HTTPS加载。

*pjax()*

返回一个布尔值，指示页面是否使用pjax()。

*wantsJson()*

返回一个布尔值，指示此请求在其接受头中是否有any /json内容类型。

*isJson()*

返回一个布尔值，指示此页请求的Content-Type头中是否有任何/json内容类型。

*accepts()*

返回一个布尔值，指示此页请求是否接受给定的内容类&#x578B;*。*

**文件**

到目前为止，我们所涵盖的所有输入都是显式的（通过all()，input()等方法检索）或由浏览器或引用站点定义（通过pjax()等方法检索）。 文件输入类似于显式用户输入，但它们的处理方式大不相同。

*file()*

返回上传文件的数组，如果传递一个键(上传文件的名字),则返回文件。

*allFiles()*

返回所有上传文件的数组；由于命名更清晰，与file()相比很有用。

*hasFile()*

返回一个布尔值，指示文件是否以指定的键上传

每个File都是Symfony\Component\HttpFoundation \File\UploadedFile实例，它提供了一套用于验证、处理和存储上传文件的工具。

查看第14章更多示例看如何处理上传。

**持久化**

请求还可以提供与会话交互的功能。 大多数会话功能都存在于其他地方，但有一些方法与当前页面请求相关。

*flash()*

将当前请求的用户输入闪存到稍后要检索的会话，这意味着它已保存到会话但在下一个请求后消失。

*flashOnly()*

为提供的数组键闪存当前用户请求。

*flashExcept()*

闪存当前用户请求,排除提供的数组键。

*old()*

返回以前闪存的所有用户输入的数组，或者，如果传递了一个键，则返回该键的值（如果以前闪存过）。

*flush()*

擦除以前闪存过的用户输入。

*cookie()*

从请求中检索所有cookie，或者，如果提供了*key*，则仅检索该cookie。

*hasCookie()*

返回一个布尔值，指示请求是否具有给定键的cookie。

flash\*()和old()方法用于存储用户输入并在以后检索它，通常在输入验证和拒绝后使用。
