thinkphp的mvc理解

ThinkPHP支持多层设计。

1.模型层Model

使用多层目录结构和命名规范来设计多层的model,例如在项目设计中若是须要区分数据层,逻辑层,服务层等不一样的模型层能够在模块目录下建立Model,Logic,Service目录,把对用户表的全部模型操做分红3层。

1.Model/UserModel用于定义数据相关的自动验证,自动完成和数据存取接口

2.Logic/UserLogical用于定义用户相关的业务逻辑

3.Service/UserService用于定于用户相关的服务接口

这三个模型都继承Model类便可例如数据层Home/Model/UserModel. class.php

namespace Home\Model;
use Think\Model;
class UserModel extends Model{}
逻辑层Home/Logic/UserLogical. class.php

namespace Home\Logic;
use Think\Model;
class UserLogic extends Model{}
服务层Home/Service/UserService. class.php

namespace Home\Service;
use Think\Model;
class UserService extends Model{}
在调用的时候可使用内置的D方法或M方法经行调用

D( ' User '// 实例化UserModel
D( ' User ', ' Logic '// 实例化UserLogic
D( ' User ', ' Service '// 实例化UserService
调用默认的模型层Model下的数据存取接口类的时候没有第二个参数模型文件名称,默认的模型层是Model,也能够更改设置以下:

' DEFAULT_M_LAYER '       =>   ' Logic '//  更改默认的模型层名称为Logic
这样的话实例化方法就须要相应的修改了

D( ' User '// 实例化UserLogic
D( ' User ', ' Model '// 实例化UserModel
D( ' User ', ' Service '// 实例化UserService
能够看到使用D( ' User ')默认状况下会去实例化UserLogice类了,这个是很灵活的,若是咱们数据验证,自动完成是在js里面完成的,而取数据是从service接口中完成的,这样彻底能够只要一个Service层,其余的层就不须要了。

 

2.视图层View

视图层由模板和模板引擎组成,常见的第三方模板是.tpl,能够直接在模板中使用php代码,视图的多层能够简单的使用目录(模板主题)来区分,例如:

View/ default/User/add.html
View/blue/User/add.html
复杂一点的多层视图还可使用不一样的视图目录来区分例如:

view 普通视图层目录
mobile 手机端访问视图层目录
这样不一样的模板可使用不一样的页面风格,还能够默认视图目录,以下:

' DEFAULT_V_LAYER '       =>   ' Mobile '//  默认的视图层名称更改成Mobile
 

3.控制器层Controller

ThinkPHP的控制器有两种类别,一种是核心控制器,一种是业务控制器,核心控制器在ThinkPHP目录下,例如thinkphp\ThinkPHP\Library\Think\Controller\HproseController. class.php,负责应用的调度控制,包括Http请求的拦截,转发,加载配置等。咱们这里要讨论的是业务控制器,由用户本身定义的控制器类完成,多层业务控制器的实现原理和模型的分层相似,例如业务控制器和事件控制器,

Controller/UserController  // 用于用户的业务逻辑控制和调度
Event/UserEvent  // 用于用户的事件响应操做
事件这个尚未用过,看上去很高上大,web开发中的用户事件不多,大多数在js中完成。

访问控制器Home/Controller/UserController. class.php定义以下:

namespace Home\Controller;
use Think\Controller;
class UserController extends Controller{

}
事件控制器Home/Event/UserEvent. class.php的定义以下:

namespace Home\Event;
use Think\Controller;
class UserEvent extends Controller{
}
UserContrlller负责外部交互响应,经过URL请求响应,例如http: // serverName/User/index,UserEvent负责内部事件响应而且只能在内部调用A('User','Event');一样咱们能够设置默认的控制器层:

' DEFAULT_C_LAYER '       =>   ' Event '//  默认的控制器层名称改成Event 内部和外部是隔离的,多层控制器也不是强制的,能够根据应用的须要自由的分层,控制器里能够根据须要调用不一样的分层模型,也能够显示不一样的分层视图,实现不一样的主题。 在MVC的三层中,ThinkPHP并不依赖M和V,能够只有C或者只有V,用户只须要定义视图,在没有C的状况下也能自动识别,可是这种怪异的写法会让不少刚刚入门的程序员很是的迷惑。
相关文章
相关标签/搜索