Skip to content

API 对象输出扩展 ​

通过 Filter_Plugin_API_Get_Object_Array 接口,可以在 Z-BlogPHP 的 API 把对象转换为数组输出时(ApiGetObjectArray())追加或删除字段,适用于控制 API 输出内容、隐藏敏感字段、补充自定义数据等场景。

接口信息 ​

接口参数说明
Filter_Plugin_API_Get_Object_Array&$object, &$array, &$other_props, &$remove_props, &$with_relationsAPI 转换 Object 到 Array,$array 为对象数据数组,另四个参数分别控制追加属性、删除属性与关联对象

完整案例 ​

下例在文章输出中删除摘要字段,并追加一个自定义属性:

php
<?php

RegisterPlugin("demoAPP", "ActivePlugin_demoAPP");

function ActivePlugin_demoAPP()
{
    Add_Filter_Plugin('Filter_Plugin_API_Get_Object_Array', 'demoAPP_API_Get_Object_Array');
}

function demoAPP_API_Get_Object_Array(&$object, &$array, &$other_props, &$remove_props, &$with_relations)
{
    // 仅处理文章对象
    if (get_class($object) == 'Post' && $object->Type == ZC_POST_TYPE_ARTICLE) {
        // 从输出数组中移除摘要
        $remove_props[] = 'Intro';
        // 追加自定义属性(属性名会取对象同名成员的值)
        $array['demoapp_source'] = $object->Metas->demoapp_source;
    }
}

注意事项 ​

  • 参数需在回调签名中使用引用传递(&$object, &$array 等)才能生效;该接口对每个被转换的对象各触发一次,对象列表会逐个调用,用户、文章、评论等对象的 API 输出都会经过这里;
  • 回调触发时 $array 已生成(GetData() 结果并已移除 Meta),但 $other_props(追加属性)、$remove_props(删除属性)、$with_relations(关联对象)的处理在本接口之后执行,因此向 $other_props、$remove_props 追加值同样有效;
  • 系统对 Member 对象会强制移除 Guid、Password、IP 三个字段,插件不应也无法通过本接口把它们加回来;
  • 修改 $with_relations 可控制输出的关联对象(如 Category、Author、Tags),但各模块通常先用请求参数 with_relations 过滤过关联清单,直接修改不一定对所有端点生效。