PHP 结合 apidoc生成文档树

apidoc的使用可以参考http://apidocjs.com/

以下是使用PHP生成 apidoc能解析的文档树,方便开发人员尽快的输出文档,以下是方法,
将其放到公共控制器下,每次请求都调用一下,时时监听api.log,会生成一个

/**
* @api {post} login/index1
* @apiName index1
* @apiGroup login
*
* @apiParam {string} mobile
*
* @apiSuccess {int} errcode
* @apiSuccess {string} errmsg
* @apiSuccess {object} data
* @apiSuccess {string} data.mobile
* @apiSuccess {string} data.is_create
*
* @apiSuccessExample Success-Response:
{
“errcode”: 0,
“errmsg”: “操作成功”,
“data”: {
“mobile”: “12345678910”,
“is_create”: “1”
}
}
*/

如下生成的代码:

/**
 * 创建apidoc文档
 * @param $data
 */

public function create_api($data) {

    $str = "/**" . PHP_EOL;
    $url = uri_string();

    $str .= ' * @api {' . strtolower($_SERVER['REQUEST_METHOD']) . '} ' . $url . PHP_EOL;
    list($one, $two) = explode('/', $url);
    $str .= ' * @apiName ' . $two . PHP_EOL;
    $str .= ' * @apiGroup ' . $one . PHP_EOL;
    $str .= ' *' . PHP_EOL;
    $request = $this->input->post(null);
    if (!empty( $request )) {
        foreach ($request as $k => $v) {
            if ($k == 'is_create') {
                continue;
            }
            $str .= ' * @apiParam {string} ' . $k . PHP_EOL;
        }
        $str .= ' *' . PHP_EOL;
    }

    $str .= $this->get_re($data, '', 1);

    $str .= ' *' . PHP_EOL;

    $str .= ' * @apiSuccessExample Success-Response:' . PHP_EOL;
    $str .= json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
    $str = str_replace(['integer', 'array'], ['int', 'object'], $str);
    $str .= PHP_EOL . ' */' . PHP_EOL;
    $config =& get_config();
    file_put_contents($config['log_path'] . '/api.log', PHP_EOL . $str, FILE_APPEND);

}

public function get_re($data, $pre = '', $deep = 1) {
    if ($deep > 10) {
        return false;
    }
    global $str;
    foreach ($data as $index => $item) {
        $is_num = is_numeric($index);
        $is_arr = is_array($item);
        if ($is_arr) {
            if ($is_num) {
                if (strpos($str, $pre)) {
                    break;
                } else {
                    $this->get_re($item, $pre, $deep);
                }
            } else {
                $str .= ' * @apiSuccess {' . gettype($item) . '} ' . $pre . $index . PHP_EOL;
                $deep = $deep + 1;
                $this->get_re($item, $pre . $index . '.', $deep);
            }
        } else {
            $str .= ' * @apiSuccess {' . gettype($item) . '} ' . $pre . $index . PHP_EOL;
        }
    }
    return $str;
}

你可能感兴趣的:(PHP)