筋斗云接口编程 / 对象型接口(二)

来源:互联网 发布:淘宝与京东哪个更可靠 编辑:程序博客网 时间:2024/05/16 06:28

定制操作类型和字段

对象接口通过继承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来设置。

0 0
原创粉丝点击