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 相关文章推荐
Apache, PHP在Windows 9x/NT下的安装与配置 (二)
Oct 09 PHP
php $_SERVER当前完整url的写法
Nov 12 PHP
如何在Ubuntu下启动Apache的Rewrite功能
Jul 05 PHP
浅析php与数据库代码开发规范
Aug 08 PHP
PHP实现自动登入google play下载app report的方法
Sep 23 PHP
php中filter_input函数用法分析
Nov 15 PHP
PHP获取POST数据的几种方法汇总
Mar 03 PHP
PHP实现在线阅读PDF文件的方法
Jun 23 PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
Mar 21 PHP
Thinkphp3.2.3整合phpqrcode生成带logo的二维码
Jul 21 PHP
PHP中的密码加密的解决方案总结
Oct 26 PHP
php将print_r处理后的数据还原为原始数组的解决方法
Nov 02 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 修改zen-cart下单和付款流程以防止漏单
2010/03/08 PHP
php 上一篇,下一篇文章实现代码与原理说明
2010/05/09 PHP
PHP封装的完整分页类示例
2018/08/21 PHP
利用PHP计算有多少小于当前数字的数字方法示例
2020/08/26 PHP
javascript 动态添加事件代码
2008/11/30 Javascript
js 解决“options为空或不是对象”
2008/12/22 Javascript
javascript 折半查找字符在数组中的位置(有序列表)
2010/12/09 Javascript
js判断某个方法是否存在实例代码
2015/01/10 Javascript
jquery实现动态操作select选中
2015/02/11 Javascript
JS+CSS实现的竖向简洁折叠菜单效果代码
2015/10/22 Javascript
模拟javascript中的sort排序(简单实例)
2016/08/17 Javascript
Node.js 数据加密传输浅析
2016/11/16 Javascript
JS组件系列之MVVM组件 vue 30分钟搞定前端增删改查
2017/04/28 Javascript
微信小程序实现鼠标拖动效果示例
2017/12/01 Javascript
微信小程序表单验证form提交错误提示效果
2020/06/19 Javascript
ES6 Class中实现私有属性的一些方法总结
2019/07/08 Javascript
JS实现纸牌发牌动画
2021/01/19 Javascript
[01:02:18]VGJ.S vs infamous Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
[01:02:04]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
Python实现的爬虫功能代码
2017/06/24 Python
Python cookbook(数据结构与算法)让字典保持有序的方法
2018/02/18 Python
简单实现python聊天程序
2018/04/01 Python
python 统计数组中元素出现次数并进行排序的实例
2018/07/02 Python
pyhanlp安装介绍和简单应用
2019/02/22 Python
使用Python的OpenCV模块识别滑动验证码的缺口(推荐)
2019/05/10 Python
解决pyinstaller打包发布后的exe文件打开控制台闪退的问题
2019/06/21 Python
python pandas利用fillna方法实现部分自动填充功能
2020/03/16 Python
用python查找统一局域网下ip对应的mac地址
2021/01/13 Python
Python3.9.1中使用match方法详解
2021/02/08 Python
HTML5新增加标签和功能概述
2016/09/05 HTML / CSS
美国手工艺品市场的领导者:Annie’s
2019/04/04 全球购物
上海世博会口号
2014/06/19 职场文书
巾帼文明岗事迹材料
2014/12/24 职场文书
观看安全警示教育片心得体会
2016/01/15 职场文书
2016大学生就业指导课心得体会
2016/01/15 职场文书
JAVA长虹键法之建造者Builder模式实现
2022/04/10 Java/Android