thinkphp多层MVC用法分析


Posted in PHP onDecember 30, 2015

本文实例讲述了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的情况下也能自动识别,但是这种怪异的写法会让很多刚刚入门的程序员非常的迷惑。

多层设计在目前的项目中还没有用到,在.net项目中倒见到很多,下次用到再做补充。

希望本文所述对大家基于thinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP新手上路(七)
Oct 09 PHP
php 团购折扣计算公式
Nov 24 PHP
phpmyadmin3 安装配置图解教程
Mar 29 PHP
深入php中var_dump方法的使用详解
Jun 24 PHP
phpphp图片采集后按原路径保存图片示例
Feb 18 PHP
php使用date和strtotime函数输出指定日期的方法
Nov 14 PHP
php实现的用户查询类实例
Jun 18 PHP
CI框架实现优化文件上传及多文件上传的方法
Jan 04 PHP
php基于环形链表解决约瑟夫环问题示例
Nov 07 PHP
php连接MSsql server的五种方法总结
Mar 04 PHP
php微信公众号开发之校园图书馆
Oct 20 PHP
phpfpm的作用和用法
Oct 10 PHP
thinkphp命名空间用法实例详解
Dec 30 #PHP
详解PHP中的null合并运算符
Dec 30 #PHP
thinkPHP导出csv文件及用表格输出excel的方法
Dec 30 #PHP
PHP使用strtotime获取上个月、下个月、本月的日期
Dec 30 #PHP
分享PHP守护进程类
Dec 30 #PHP
如何写php守护进程(Daemon)
Dec 30 #PHP
PHP汉字转换拼音的函数代码
Dec 30 #PHP
You might like
三种php连接access数据库方法
2013/11/11 PHP
PHP操作MySQL事务实例
2014/11/05 PHP
php二维数组合并及去重复的方法
2015/03/04 PHP
php简单生成随机数的方法
2015/07/30 PHP
php实现跨域提交form表单的方法【2种方法】
2016/10/17 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
PDO操作MySQL的基础教程(推荐)
2017/08/18 PHP
jquery中的查找parents与closest方法之间的区别
2013/12/02 Javascript
JS获取节点的兄弟,父级,子级元素的方法
2014/01/09 Javascript
js charAt的使用示例
2014/02/18 Javascript
Node.js中使用mongoskin操作mongoDB实例
2014/09/28 Javascript
Bootstrap框架结合jQuery仿百度换肤功能实例解析
2016/09/17 Javascript
浅析js的模块化编写 require.js
2016/12/07 Javascript
vue.js开发环境安装教程
2017/03/17 Javascript
详解webpack打包vue时提取css
2017/05/26 Javascript
JavaScript面向对象精要(下部)
2017/09/12 Javascript
了解JavaScript中let语句
2019/05/30 Javascript
vue打开子组件弹窗都刷新功能的实现
2020/09/21 Javascript
[02:22]《新闻直播间》2017年08月14日
2017/08/15 DOTA
Python使用SocketServer模块编写基本服务器程序的教程
2016/07/12 Python
python 搭建简单的http server,可直接post文件的实例
2019/01/03 Python
python 判断矩阵中每行非零个数的方法
2019/01/26 Python
Python3操作读写CSV文件使用包过程解析
2020/04/10 Python
python datetime处理时间小结
2020/04/16 Python
Django之富文本(获取内容,设置内容方式)
2020/05/21 Python
MATCHESFASHION澳大利亚/亚太地区:英国时尚奢侈品电商
2020/01/14 全球购物
学生发电厂实习自我鉴定
2013/09/22 职场文书
实习生体会的自我评价范文
2013/11/28 职场文书
哈弗商学院毕业生求职信
2014/02/26 职场文书
人事经理岗位职责
2014/04/28 职场文书
文明家庭先进事迹材料
2014/05/14 职场文书
四风问题个人自查剖析材料思想汇报
2014/09/21 职场文书
医院护士工作检讨书
2014/10/26 职场文书
2016年教师新年寄语
2015/08/18 职场文书
2016秋季校长开学典礼致辞
2015/11/26 职场文书
Go 语言中 20 个占位符的整理
2021/10/16 Golang