rest_get_endpoint_args_for_schema()
云策文档标注
概述
rest_get_endpoint_args_for_schema() 函数用于从 JSON 模式中提取端点参数数组,支持根据 HTTP 方法(如 CREATABLE 或 EDITABLE)调整参数处理,如默认值和必需性检查。
关键要点
- 函数接受两个参数:$schema(必需,JSON 模式数组)和 $method(可选,HTTP 方法,默认为 WP_REST_Server::CREATABLE)。
- 返回一个数组,包含基于模式属性生成的端点参数,包括验证和清理回调。
- 对于 CREATABLE 端点,会处理默认值和必需参数;对于 EDITABLE 端点,则忽略这些。
- 函数会跳过只读属性,并合并 arg_options 中的额外选项。
代码示例
function rest_get_endpoint_args_for_schema( $schema, $method = WP_REST_Server::CREATABLE ) {
$schema_properties = ! empty( $schema['properties'] ) ? $schema['properties'] : array();
$endpoint_args = array();
$valid_schema_properties = rest_get_allowed_schema_keywords();
$valid_schema_properties = array_diff( $valid_schema_properties, array( 'default', 'required' ) );
foreach ( $schema_properties as $field_id => $params ) {
if ( ! empty( $params['readonly'] ) ) {
continue;
}
$endpoint_args[ $field_id ] = array(
'validate_callback' => 'rest_validate_request_arg',
'sanitize_callback' => 'rest_sanitize_request_arg',
);
if ( WP_REST_Server::CREATABLE === $method && isset( $params['default'] ) ) {
$endpoint_args[ $field_id ]['default'] = $params['default'];
}
if ( WP_REST_Server::CREATABLE === $method && ! empty( $params['required'] ) ) {
$endpoint_args[ $field_id ]['required'] = true;
}
foreach ( $valid_schema_properties as $schema_prop ) {
if ( isset( $params[ $schema_prop ] ) ) {
$endpoint_args[ $field_id ][ $schema_prop ] = $params[ $schema_prop ];
}
}
if ( isset( $params['arg_options'] ) ) {
if ( WP_REST_Server::CREATABLE !== $method ) {
$params['arg_options'] = array_diff_key(
$params['arg_options'],
array(
'required' => '',
'default' => '',
)
);
}
$endpoint_args[ $field_id ] = array_merge( $endpoint_args[ $field_id ], $params['arg_options'] );
}
}
return $endpoint_args;
}注意事项
- 函数在 WordPress 5.6.0 版本中引入,是 REST API 开发的关键工具。
- 依赖 rest_get_allowed_schema_keywords() 获取有效的 JSON 模式关键字。
- 常用于 WP_REST_Controller::get_endpoint_args_for_item_schema() 中,以简化端点参数生成。
原文内容
Retrieves an array of endpoint arguments from the item schema and endpoint method.
Parameters
$schemaarrayrequired-
The full JSON schema for the endpoint.
$methodstringoptional-
HTTP method of the endpoint. The arguments for
CREATABLEendpoints are checked for required values and may fall-back to a given default, this is not done onEDITABLEendpoints.Default:
WP_REST_Server::CREATABLE
Source
function rest_get_endpoint_args_for_schema( $schema, $method = WP_REST_Server::CREATABLE ) {
$schema_properties = ! empty( $schema['properties'] ) ? $schema['properties'] : array();
$endpoint_args = array();
$valid_schema_properties = rest_get_allowed_schema_keywords();
$valid_schema_properties = array_diff( $valid_schema_properties, array( 'default', 'required' ) );
foreach ( $schema_properties as $field_id => $params ) {
// Arguments specified as `readonly` are not allowed to be set.
if ( ! empty( $params['readonly'] ) ) {
continue;
}
$endpoint_args[ $field_id ] = array(
'validate_callback' => 'rest_validate_request_arg',
'sanitize_callback' => 'rest_sanitize_request_arg',
);
if ( WP_REST_Server::CREATABLE === $method && isset( $params['default'] ) ) {
$endpoint_args[ $field_id ]['default'] = $params['default'];
}
if ( WP_REST_Server::CREATABLE === $method && ! empty( $params['required'] ) ) {
$endpoint_args[ $field_id ]['required'] = true;
}
foreach ( $valid_schema_properties as $schema_prop ) {
if ( isset( $params[ $schema_prop ] ) ) {
$endpoint_args[ $field_id ][ $schema_prop ] = $params[ $schema_prop ];
}
}
// Merge in any options provided by the schema property.
if ( isset( $params['arg_options'] ) ) {
// Only use required / default from arg_options on CREATABLE endpoints.
if ( WP_REST_Server::CREATABLE !== $method ) {
$params['arg_options'] = array_diff_key(
$params['arg_options'],
array(
'required' => '',
'default' => '',
)
);
}
$endpoint_args[ $field_id ] = array_merge( $endpoint_args[ $field_id ], $params['arg_options'] );
}
}
return $endpoint_args;
}
Changelog
| Version | Description |
|---|---|
| 5.6.0 | Introduced. |