在ThinkPHP官方手册中,关于Model的分层类型只是大概简述了下。
大概简述了下官方举出了4中例子
1、Model层(模型层)
2、Service层(服务层)
3、Logic层(逻辑层)
4、API层(接口层)
一直以来都不是很明白Service层,Logic层,API层的具体用法
这一切都跟经验有关,在个人自己开发了几个项目之后,今天好像突然开窍了
Ps:作为一个自学屌丝,很不容易了
Service层,即是服务层的意思,如何使用它呢?我是这样处理的
在之前的例子中,我是统统把数据增删改查放到控制器层,再后面我发现其他人放到Model层中封装层函数处理,然后我也学着放进去,但是又发现这样也不是很好,举个例子:
业务功能:用户登录后台之后,需要修改自己的密码
业务分析:那我把这个修改密码的数据层操作分为两块,一个是Model层进行表数据校验,我比较老实,哈哈,把所有的表字段进行了分类校验,分别为:登录操作校验,字段逻辑校验,字段空值校验,字段长度校验,字段唯一性校验,字段类型校验,(除了登录操作是必须验证的条件,其他的验证都是存在就验证,这也保证了前台触发时,如果数据填空,或者输入的数据与数据库字段设计冲突时,不会直接返回错误,这点我已经提交给了官方建议:http://www.thinkphp.cn/topic/37410.html),进行完了数据校验之后,那么他的数据肯定是符合我们的要求的,直接实例化Service层模型,执行修改密码方法,在执行密码方法里面我就给他设定自动完成规则,然后进行自动创建数据,再通过读取当前用户登录的UID进行新增数据主键,直接执行save操作!
附上代码:
<?php
namespace Admin\Service;
class MemberService extends \Think\Model{
/**
* [edit_person_password 修改个人密码]
* @param string $field [要自动完成的字段]
* @return [boolean]
*/
public function edit_person_password($fields = ''){
$this->_auto = array(
array('password','md5',3,'function'),
);
//是否指定创建字段
if(!$fields){
$this->create();
} else {
$this->field($fields)->create();
}
$core = new \Admin\Api\Core();
$this->uid = $core->uid;
return $this->save();
}
}Logic 与 Api 层模型都是跟Service大同小异,甚至你还可以自定义名称层模型,只要你的类继承了\Think\Model 最佳答案