自定义模型

YY框架的模型既不是传统的基于数据库的POJO类也不是旨在操纵数据库的Active Record类。 YY框架的模型是基于两种的结合,这种结合最大限度的发挥了Model层的自由度

我们来看一个例子:

class User extends Model {
    //此处定义虚拟字段
    //public $virtual_field = null;

    /**
    * 数据入库之前的合法性验证
    */
    public function validate(){
        //验证示例
        //$this->val_eamil('email');
        //或:$this->val_eamil('email','邮箱地址不正确');
        $this->val_eamil('email','电子邮箱格式不正确!');
        $this->val_min_length('un', 3,'帐号长度不能小于3个字符!');
        $this->val_max_length('un', 50,'帐号长度不能大于于50个字符!');
        $this->val_max_length('pwd', 50,'密码长度不能大于于50个字符!');
        $this->val_min_length('pwd', 3,'密码长度不能小于3个字符!');
        $this->val_unique('un','该用户名已经被注册!');
        $this->val_url('net','网址信息不正确!');
        $this->val_tel('phone','电话号码格式不正确!');
    }

    /**
    * 根据数据库的数据进行虚拟字段的填充
    */
    public function fill_virtual_field(){
        //虚拟字段填充示例
        //$this->virtual_field = $this->id.'_'.$this->name;

    }

    /**
    * 根据模型中的虚拟字段回填数据库字段数据
    */
    public function fill_entity_field(){
        //回填示例
        //$names = explode('_', $this->virtual_field);
        //$this->name = $names[1];

    }

    /**
    * 读取Model类的访问地址,有些模型数据的访问地址不止一个,需自行扩展
    */
    public function path(){
        //组合示例
        //$path = '/'.$this->theme.'/'.date('Y-m-d', $this->posttime).'/'.$this->id.'.html';
        //return $path;

    }

}

这是一个典型的自定义模型的例子。

虚拟字段是指数据库中不存在的字段,但是为了方便的数据的显示和汇总人为在模型中增加了这些字段。

例如表单页面上可能会有年、月、日三个字段内容,实际的数据库中只有一个日期字段,这个时候利用虚拟字段功能实现数据操作层面的透明处理。

必须重写的方法

validate

这个方法是模型类的验证信息注册,方法内部依次填写各个字段所满足的格式要求。 详细的验证规则和使用方式请参阅模型数据校验

fill_virtual_field

根据数据库的数据进行虚拟字段的填充,这个方法会在模型数据初始完成后由框架自动调用。 方法中的内容是要明确的告诉框架每个虚拟字段的具体生成方式。

fill_entity_field

根据模型中的虚拟字段回填数据库字段数据,这个方法是在模型的数据即将保存(更新)到数据库前由框架自动调用。 方法中的内容旨在告诉框架如何把虚拟字段的内容转化为集体的数据库字段。

注意:以上三个方法只有在继承数据库模型时才是必须重写的,继承简单模型时validate方法可以根据实际需要进行重写。