如何在PHP Restler 3中记录所有请求?

时间:2015-08-06 10:38:54

标签: php restler

我已经使用Luracast Restler 3 RC 6(https://github.com/Luracast/Restler/tree/3.0.0-RC6)创建了一个API,现在我想创建一个登录到我的API,以便记录每个API请求。我试图在任何地方寻找答案,没有运气。所以我的问题是:

如何在Restler 3中创建日志记录类/函数,每次发出请求时都会调用它?应该以某种方式实现路由,还是什么?我需要这样的东西:

logging($route, $http_method, $format, $api_key, $parameters);

这个函数/类应该获取正在进行的请求的所有可能信息,并将其插入到logging表中,如下所示:

+----+---------------------+------------+----------+----------------+--------+---------------------------+
| id | log_time            | ip_address | api_key  | route          | method | parameters                |
+----+---------------------+------------+----------+----------------+--------+---------------------------+
|  1 | 2015-08-06 14:32:54 |  127.0.0.1 | ASDFasdf | /v1/users/list |    GET | all_given_parameters_here |
+----+---------------------+------------+----------+----------------+--------+---------------------------+

我不是要求你为我创建一个用于记录的函数/类,我只需要一些关于如何以及在何处执行此操作的指导,或者甚至是否可能?

编辑: 忘记提及我还需要记录方法,该方法用于给定的路由:GET,POST,PUT,PATCH或DELETE。也许还使用了格式(JSON或XML)。

编辑: 我假设我应该以某种方式扩展Luracast \ Restler \ Routes.php Routes->find(),但是如何以及在哪里?

1 个答案:

答案 0 :(得分:5)

您可以使用事件处理程序(在调用阶段)。请参阅以下示例

use Luracast\Restler\Restler;
use Luracast\Restler\User;

$r = new Restler();
$r->onCall(function () use ($r) {
    // Don't log Luracast Restler Explorer recources calls
    if (!preg_match('/resources/', $r->url)) {
        $info = array(
            'base'    => $r->getBaseUrl(),
            'method'  => $r->requestMethod,
            'url'     => $r->url,
            'route'   => $r->apiMethodInfo->className.'::'.$r->apiMethodInfo->methodName,
            'version' => $r->getRequestedApiVersion(),
            'data'    => $r->getRequestData(),
            'ip'      => User::getIpAddress(),
        );
        print_r($info);
    }
});
$r->addAPIClass('Say');
$r->handle();

print_r替换为您的日志记录功能