使用 $request->post(); 獲取全部參數(shù)
我的參數(shù) 是前端提交的json 表單,JSONRPC風(fēng)格
不管你提交的是 對象還是數(shù)組 你打印出來的都是 數(shù)組類型
// 前端
Body 類型 : application/json
{
"method": "register",
"params": {}
}
// 后端
$post = $request->post();
return json([
is_array($post),
is_object($post),
gettype($post),
$post
]);
// 返回
[
true,
false,
"array",
{
"method": "register",
"params": {}
}
]
前端提交一個數(shù)組 和 對象 即可
去看了 Request $request 也沒看出所以然來,好像PHP 沒有 JSONArray JSONObject 類型
這里先給一個 PHP > 8.1.0 版本的方案
使用 array_is_list 判斷是數(shù)組還是對象
array_is_list($request->post())
老版本自己擴(kuò)展一個 這個出來
old school polyfill (:
<?php
if (!function_exists('array_is_list')) {
function array_is_list(array $array)
{
if ($array === []) {
return true;
}
$keys = array_keys($array);
return $keys === array_keys($keys);
}
}
?>
不知道你的目的是啥。$request->post() 數(shù)據(jù)類型是數(shù)組的話,你想變成 object有很多種方式。
array_is_list() 只是檢測所給的數(shù)組是不是一個list.需要數(shù)組的第一個索引是0,然后所有的索引還必須連續(xù)。
$request->post() 不管你上傳的是 json->[] 還是json->{} 數(shù)據(jù) 一律都是array 是php的問題,php 不管數(shù)組還是對象,內(nèi)部都是 有序映射
它可以被視為數(shù)組、列表(向量)、哈希表(映射的實(shí)現(xiàn))、字典、集合、堆棧、隊(duì)列等等。
if (preg_match('/\bjson\b/i', $contentType)) {
$this->data['post'] = (array)json_decode($bodyBuffer, true);
} else {
parse_str($bodyBuffer, $this->data['post']);
}
如果你在header 里面指明了數(shù)據(jù)類型是 json的,那么 $request->post()返回的數(shù)據(jù)類型就是array.
我感覺你是想用:
$post = $request->rawBody();