JSON 输入($request->json())

到目前为止,我们已经讨论了来自查询字符串(get)和表单提交(post)的输入。但是还有另一种形式的用户输入,随着JavaScript SPA的出现变得越来越常见:JSON请求。它本质上只是一个post请求,body设置为json,而不是传统的表单post。

让我们看一下向Laravel路由提交JSON可能是什么样子,以及如何使用$request->input()来提取数据(示例7-8)

Example 7-8. Getting data from JSON with $request->input()
POST /post-route HTTP/1.1 Content-Type: application/json
{
"firstName": "Joe", "lastName": "Schmoe", 
    "spouse": {
        "firstName": "Jill",
        "lastName":"Schmoe" 
    }
}

// Post-route
Route::post('post-route', function (Request $request) { 
    $firstName = $request->input('firstName');
    $spouseFirstname = $request->input('spouse.firstName');
});

由于$request->input()足够智能,可以从get、post或json中提取用户数据,因此您可能想知道为什么Laravel还提供$request->json()。您可能喜欢$request->json()有两个原因。首先,您可能只想对在项目中工作的程序员更明确地说明您期望数据来源。第二,如果post没有正确的application/json头,$request->input()不会将其作为json,但是$request->json()会认为是json

Facade 命名空间, request() 全局辅助函数和$request注入

当你在命名空间类(例如控制器)使用facade时,都必须导入完整的命名空间路径到文件顶部,例如(Illuminate\Support\Facades\Request)

因此,一些facades也有一个伴生的全局辅助功能。如果这些助手函数不带参数运行,它们将公开与外观相同的语法(例如,request()->has()与request::has()相同)。当您向它们传递参数时,它们还具有默认行为(例如,request("firstname")是request()->input('firstName')的快捷方式)。

对于请求,我们已经讨论了注入请求对象的实例,但是您也可以使用请求facade或request()全局助手。请看第10章了解更多信息。

Last updated