设计AR的子类时,喜欢把一些公开的字段定义成 public 的方式,这样可以在类转换成数组,或者 JSON / XML 结构的数据时,不用另外配置和个判断哪些属性是可以公开的
当然现在是可以的,但是又想一些公开的字段不可以被修改(只读),按目前的方式,只能set/get的方式,这样就没有公开的属性了
现在我的解决方案是只管 public 定义属性,然后 override save方法,对attribute在不同的场景下,哪些字段不可以被修改进行过滤
不知道qiang是否更好的方案解决
设计AR的子类时,喜欢把一些公开的字段定义成 public 的方式,这样可以在类转换成数组,或者 JSON / XML 结构的数据时,不用另外配置和个判断哪些属性是可以公开的
当然现在是可以的,但是又想一些公开的字段不可以被修改(只读),按目前的方式,只能set/get的方式,这样就没有公开的属性了
现在我的解决方案是只管 public 定义属性,然后 override save方法,对attribute在不同的场景下,哪些字段不可以被修改进行过滤
不知道qiang是否更好的方案解决
你说的“一些公开的字段不可以被修改”是什么意思?是指不允许被批量修改,还是不允许任何代码进行修改(包括单个赋值)?
使用 get_object_vars 函数可以获得对象已定义的属性,有的时候
class User extends CActiveRecord
{
public id;
public name;
public age;
...
}
在程序中,可以直接 json_encode 获得 {id:"idvalue"; name: "namevalue"; age: "agevalue" } 结果;
为什么要这样做的原因是,我可以做通用action,根据请求所携带的不同 header 来不同的输出,如
$data['userList'] = User::model()->findAll();
$this->render('userList', $data);
如果用户是普通的请求,则显示页面 userList.htm
若用户请求的时候携带了特殊的 header, 如: x-request(AJAX请求),则直接返回JSON对象,这个JSON 对象是由 json_encode($data)获得,其中的 User 对象都可以根据之前的定义,输出公开的字段值