这真的很奇怪。我花了至少 5 个小时试图弄清楚这个$data变量到底是什么以及其中有什么。我认为这个问题有点令人困惑,所以让我解释一下我在说什么:
register_rest_route 的回调是一个接受一个参数 $data 的函数,它似乎是一个神奇的对象。我一直在尝试遵循消息来源,以确定这是否还有更多的东西。有人可以解释一下吗?这对社区来说可能非常有启发性(好吧,或者至少是我)。
register_rest_route( 'custom/v1', '/customer/', array(
'methods' => 'POST',
'callback' => 'get_stuff',
) );
因此,我的函数get_stuff
如下所示:
get_stuff( $data ) {
return array(
'is object? ' . is_object( $data ), // returns 1
'is array? ' . is_array( $data ), // returns blank; nothing
get_object_vars( $data ), // returns an empty array
$data, // returns {}; an empty object
$data['assignee'], // returns POST'd data as expected
$data['number'], // returns POST'd data as expected
$data->number // returns null; I thought this was an object? Why doesn't this work?
}
什么是$data
?
在很长一段时间里,我试图返回整个$data对象,只是为了测试/调试/播放,并且得到了一个空对象,直到我尝试获取其中一个属性。我完全困惑了,因为它的行为不像一个物体,但显然是一个物体。我似乎无法完全理解它,但前提是我指定了一个属性。有人可以澄清这一点吗?
返回类型是一个WP_REST_REQUEST对象,因此为了获取请求的正文,您必须调用 get_body 方法。
function get_stuff( $data ) {
$result = $data->get_body(); //returns a string of the body
return $result;
}
但是,如果您像我一样,您很可能会在 POST 请求中发送 JSON,因此请调用 parse_json 方法来获取对象/数组。
function get_val($data){
$json_result = json_decode($data->get_body(), true); //note second param is for setting this to an associative array
$some_value = $json_result["some_var"];
return $some_value;
}
以下是一些有用的链接:WP_REST_REQUEST文档:https://developer.wordpress.org/reference/classes/wp_rest_request/
解析 JSON:https://developer.wordpress.org/reference/functions/json_decode/