筋斗雲接口編程 / 對象型接口(二)

定製操作類型和字段

對象接口通過繼承AccessControl類來實現,默認允許5個標準對象操作,可以改寫屬性$allowedAc來限定允許的操作:

class AC_ApiLog extends AccessControl
{
    protected $allowedAc = ["get", "query"];
    // 默認值爲 ["add", "get", "set", "del", "query"]
}

缺省get/query操作返回ApiLog的所有字段,可以用屬性$hiddenFields隱藏一些字段,比如不返回”addr”和”tm”字段:

class AC_ApiLog extends AccessControl
{
    protected $hiddenFields = ["addr", "tm"];
}

對於add/set接口,可用$requiredFields設置必填字段,用$readonlyFields設置只讀字段。
特別地,”id”字段默認就是隻讀的,無須設置。

示例:實現下面控制邏輯

  • “addr”字段爲必填字段,即在add接口中必須填值,在set接口中不允許置空;
  • “tm”字段爲只讀字段,即在add/set接口中如果填值則忽略(但不報錯);
  • 在add操作中,由程序自動填寫”tm”字段。
class AC_ApiLog extends AccessControl
{
    protected $requiredFields = ["addr"];
    protected $readonlyFields = ["tm"];

    // 由add/set接口回調,用於驗證字段(Validate),或做自動補全(AutoComplete)工作。
    protected function onValidate()
    {
        if ($this->ac == "add") {
            $_POST["tm"] = date(FMT_DT);
        }
    }
}

例中使用回調onValidate來對tm字段自動填值。
上面用到的常量FMT_DT是框架定義的標準日期格式,常用於格式化日期字段傳到數據庫。

如果某些字段是在添加時不是必填,但更新時不可置空,可以用$requiredFields2來設置;
類似地,添加時可寫,更新時只讀的字段,用$readonlyFields2來設置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章