获取请求的基本信息

既然您知道了如何获取请求实例,那么您可以用它做什么呢?请求对象的主要目的是表示当前的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展示如何在请求方法上使用用户提供的信息

Example 10-3. Getting basic user-provided information from the request
// 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';
});

用户和请求状态

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

method()

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

path()

返回不带域的页面路径,例如,http://www.myapp.com/abc/de会返回/abc/de

url()

返回带域的页面路径,例如http://www.myapp.com/abc 会返回 http://www.myapp.com/abc

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()

返回一个布尔值,指示此页请求是否接受给定的内容类型

文件

到目前为止,我们所涵盖的所有输入都是显式的(通过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()方法用于存储用户输入并在以后检索它,通常在输入验证和拒绝后使用。

Last updated