移动端和web端传递数组问题

小弟一直有个疑惑,web端post数组形式的参数可以直接传递结构化的数组数据。为什么移动端/小程序就不能直接传递数组形式的参数呢,往往都需要json.stringify()序列话一下,然后到后端的时候还得json.decode一下。
web端的请求可以跳过这一步。 可以直接将request的array数据直接通过ORM的cast直接写入数据库。

web的request的rules可以这么写

'address' => 'required|array',
'area_code' => 'required|array',

移动端的request的rules需要写成

'address' => 'required|string',
'area_code' => 'required|string',

这样就需要写两份requests

小程序尝试将字段改为code[]这种形式,
写入到数据中虽然也是数组形式,但是却是单条字符串记录。不符合预期

移动端和web端传递数组问题

有老司机帮忙指点一二么

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

请求头

'Content-Type': 'application/json'
2年前 评论
osang (楼主) 2年前
勇敢的心 (作者) 2年前
osang (楼主) 2年前
讨论数量: 3

请求头

'Content-Type': 'application/json'
2年前 评论
osang (楼主) 2年前
勇敢的心 (作者) 2年前
osang (楼主) 2年前

1 楼说的对,http 协议规定:客户端发送请求的时候,可以指定 content-type,用于告诉服务器,我给你发送的是什么格式的媒体内容。而 Laravel 在这里进行了判断,如果客户端发送的是 json,Laravel 就会把内容格式化为 json。

2年前 评论

建议你详细学习一下HTTP协议。我可以给你简单讲下 'Content-Type': 'application/json''Content-Type': 'x-www-form-urlencoded' ,这两个请求头,对应的HTTP报文,形如(省略了部分请求头):

POST / HTTP/1.1
Host: www.baidu.com
Content-Type: x-www-form-urlencoded

name=jack&age=18&height=170cm
POST / HTTP/1.1
Host: www.baidu.com
Content-Type: application/json

{"name": "jack", "age": 18, "height": "170cm"}

x-www-form-urlencoded 是受PHP原生支持的,PHP自动解析到 $_POST 变量。

在laravel中,x-www-form-urlencoded 格式的body同理解析到request中,当指定请求头 Content-Type: application/json 时,使用json解析器进行解析body体。所以在未明确指定 请求头 Content-Type: application/json 时,laravel按x-www-form-urlencoded格式去解析,自然无法成功解析变量到request

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!