簡體   English   中英

Luracast Restler 3 登錄響應

[英]Luracast Restler 3 logging onRespond

跟進此解決方案的問題: https : //stackoverflow.com/a/31883204/3548238

  1. 如果我想在“onRespond()”事件中記錄請求,我如何訪問狀態代碼? 例如:如果請求以狀態代碼 200 響應,我想記錄“success = 1”,如果是其他內容,則記錄“success = 0”
  2. 如果我的 API 使用“throw new RestException(404, “Example not found”);”拋出異常,我可以以某種方式訪問​​該消息嗎? 或者如果身份驗證失敗或任何原因。
  3. 我可以/如何提出一些請求,以便它們在任何情況下都不會被記錄? 我知道我應該為它創建某種注釋,但是:如何?

例如這樣的事情:

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

您應該使用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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM