读取器模型基类的定义
读取器可以独立完成图片资源的URL的读取和拼接功能,在很多类都会使用,为避免代码的重复自然会产生可不可以将读取器封装成一个函数的想法,但是即使封装成一个函数,在每次使用的时候还是要重复调用这个函数。比较好的思路是建立一个模型的基类,让每一个需要拼接URL的类来继承这个基金经类。
class BaseModel extendsModel //这个积累必须继承Model类
{protected function getUrlAttr($value,$data){$finalUrl = $value;
if($data['from']==1){
$finalUrl = config('setting.img_prefix').$value;}
return $finalUrl; }
这样做有一个问题:如果在别数据库有URL这个字段,但是他表示的并不是URL路径,如果继承模型基类,会自动支撑URL的拼接,这是我们不希望发生的事情。为了是的读取器更加灵活,采用如下解决方案:
1、在模型基类中,将读取器函数名改为:prefixImgUrl//这是就不是读取器了,如果不主动调用时不会执行URL枯井拼接的。
2、在需要完成URL拼接的子类里面建立读取器,直接调用基类的函数:
class Image extends BaseModel //继承BaseModel
{
public function getUrlAttr($value,$data){ //建立读取器
return $this->prefixImgUrl($value,$data);//主动调用基类里面定义的函数
}}
另外,实现这个功能建立的BaseModel类可以扩展开来将涉及到模型的共同属性或者业务逻辑都可以抽象到这个类里面去,让有需要的类去继承这个BaseModel这样也是面向对象的编程思想的体现。