什么是register_rest_route的回调$data变量


What is register_rest_route's callback's $data variable?

这真的很奇怪。我花了至少 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/