筋斗雲接口編程 / 接口返回前回調

接口返回前回調

示例:添加訂單到Ordr表時,自動添加一條”創建訂單”日誌到OrderLog表,可以這樣實現:

class AC1_Ordr extends AccessControl
{
    protected function onValidate()
    {
        if ($this->ac == "add") {
            ... 

            $this->onAfterActions[] = function () {
                $orderId = $this->id;
                $sql = sprintf("INSERT INTO OrderLog (orderId, action, tm) VALUES ({$orderId},'CR','%s')", date('c'));
                execOne($sql);
            };
        }
    }
}

屬性$this->onAfterActions是一個回調函數數組,在操作結束時被回調。
屬性$this->id可用於取add操作結束時的新對象id,或get/set/del操作的id參數。

對象接口調用完後,還會回調onAfter函數,也可以在這個回調裏面操作。
此外,如要在get/query接口返回前修改返回數據,用onHandleRow回調函數更加方便。

示例:實現接口

Ordr.get(id) -> {id, status, ..., statusStr?}
Ordr.query() -> tbl(同get接口字段...)

- status: "CR" - 新創建, "PA" - 已付款
- statusStr: 狀態名稱,用中文表示,當有status返回時則同時返回該字段
class AC1_Ordr extends AccessControl
{
    static $statusStr = ["CR" => "未付款", "PA" => "待服務"];
    // get/query接口會回調
    protected function onHandleRow(&$rowData)
    {
        if (isset($rowData["status"])) {
            $st = $rowData["status"];
            $rowData["statusStr"] = @self::$statusStr[$st] ?: $st;
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章