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解析html的实现代码
Aug 08 PHP
php 操作数组(合并,拆分,追加,查找,删除等)
Jul 20 PHP
浅谈PHP中output_buffering
Jul 13 PHP
学习php设计模式 php实现装饰器模式(decorator)
Dec 07 PHP
PHP设计模式之观察者模式实例
Feb 22 PHP
php基于数组函数实现关联表的编辑操作示例
Jul 04 PHP
PHP 获取 ping 时间的实现方法
Sep 29 PHP
thinkPHP5框架实现多数据库连接,跨数据连接查询操作示例
May 29 PHP
实例分析10个PHP常见安全问题
Jul 09 PHP
php中对象引用和复制实例分析
Aug 14 PHP
tp5框架使用cookie加密算法实现登录功能示例
Feb 10 PHP
php png失真的原因及解决办法
Oct 24 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
改进的IP计数器
2006/10/09 PHP
PHP Zip解压 文件在线解压缩的函数代码
2010/05/26 PHP
php源代码安装常见错误与解决办法分享
2013/05/28 PHP
php 地区分类排序算法
2013/07/01 PHP
php过滤html标记属性类用法实例
2014/09/23 PHP
php获得文件夹下所有文件的递归算法的简单实例
2016/11/01 PHP
PHP的mysqli_sqlstate()函数讲解
2019/01/23 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
2019/04/09 PHP
解javascript 混淆加密收藏
2009/01/16 Javascript
js 控制页面跳转的5种方法
2013/09/09 Javascript
Node.js模块全局安装路径配置方法
2018/05/17 Javascript
Vue实现拖放排序功能的实例代码
2019/07/08 Javascript
Antd的Table组件嵌套Table以及选择框联动操作
2020/10/24 Javascript
Python连接MySQL并使用fetchall()方法过滤特殊字符
2016/03/13 Python
python文件的md5加密方法
2016/04/06 Python
Python数据结构与算法之图结构(Graph)实例分析
2017/09/05 Python
Python用 KNN 进行验证码识别的实现方法
2018/02/06 Python
python DataFrame获取行数、列数、索引及第几行第几列的值方法
2018/04/08 Python
提升Python程序性能的7个习惯
2019/04/14 Python
Python+OpenCV采集本地摄像头的视频
2019/04/25 Python
使用Fabric自动化部署Django项目的实现
2019/09/27 Python
python 协程 gevent原理与用法分析
2019/11/22 Python
flask框架自定义url转换器操作详解
2020/01/25 Python
Tensorflow tensor 数学运算和逻辑运算方式
2020/06/30 Python
Python爬虫实例——scrapy框架爬取拉勾网招聘信息
2020/07/14 Python
Python 如何查找特定类型文件
2020/08/17 Python
物业管理应届生求职信
2013/10/28 职场文书
办公室主任岗位职责
2013/11/08 职场文书
社区端午节活动方案
2014/01/28 职场文书
国家领导干部党的群众路线教育实践活动批评与自我批评材料
2014/09/23 职场文书
授权委托书样本
2014/09/25 职场文书
党员学习群众路线心得体会
2014/11/04 职场文书
只需要这一行代码就能让python计算速度提高十倍
2021/05/24 Python
React列表栏及购物车组件使用详解
2021/06/28 Javascript
css中z-index: 0和z-index: auto的区别
2021/08/23 HTML / CSS
Kubernetes控制节点的部署
2022/04/01 Servers