Luracast Restler 3登录响应

时间:2015-09-28 07:39:02

标签: php logging restler

此解决方案的后续问题:https://stackoverflow.com/a/31883204/3548238

  1. 如果我想在" onRespond()"中记录请求事件,我如何访问状态代码?例如:如果请求以状态代码200响应,我想记录" success = 1"如果是别的话,那么" success = 0"
  2. 我可以以某种方式访问​​该消息,如果我的API抛出异常"抛出新的RestException(404,"示例未找到");"或者如果auth失败或原因是什么。
  3. 我能/我怎样才能提出一些要求,以便在任何情况下都不会被记录?我知道我应该为它创建一些注释,但是:怎么样?
  4. 例如:

    /**
     *
     * @status      200
     *
     * @description Get all logs
     * @url         GET logs
     * @access      protected
     * @class       AccessControl {@requires admin}
     *
     * @log         false
     *
     * @throws RestException
     */
    public function list_all_logs() {
    ...
    ...
    

1 个答案:

答案 0 :(得分:1)

您应该使用onComplete代替onRespond

为什么?

  • onRespond() - 在发送回复之前被解雇
  • onComplete() - 发送回复后被解雇

这是一个完整的解决方案,可以回答您的所有问题,假设您要为要排除的api方法添加@log false条评论

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

$r = new Restler();
$r->onComplete(function () use ($r) {
    if (
        !isset($r->apiMethodInfo->metadata['log']) ||
        $r->apiMethodInfo->metadata['log'] == 'true'
    ) {
        $success = $r->responseCode == 200;
        $info = array(
            'success' => $success,
            'message' => $success ? '' : $r->exception->getErrorMessage()
        );
        print_r($info); //your logging function here!
    }
});
$r->addAPIClass('Say');
$r->handle();