定制操作类型和字段
对象接口通过继承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
来设置。