thinkphp多层MVC用法分析
本文实例讲述了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,也可以更改设置如下:
这样的话实例化方法就需要相应的修改了
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 手机端访问视图层目录
这样不同的模板可以使用不同的页面风格,还可以默认视图目录,如下:
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');同样我们可以设置默认的控制器层:
内部和外部是隔离的,多层控制器也不是强制的,可以根据应用的需要*的分层,控制器里可以根据需要调用不同的分层模型,也可以显示不同的分层视图,实现不同的主题。
在mvc的三层中,thinkphp并不依赖m和v,可以只有c或者只有v,用户只需要定义视图,在没有c的情况下也能自动识别,但是这种怪异的写法会让很多刚刚入门的程序员非常的迷惑。
多层设计在目前的项目中还没有用到,在.net项目中倒见到很多,下次用到再做补充。
更多关于thinkphp相关内容感兴趣的读者可查看本站专题:《thinkphp入门教程》及《thinkphp常用方法总结》
希望本文所述对大家基于thinkphp框架的php程序设计有所帮助。
上一篇: 防止SQL注入攻击的一些方法小结
下一篇: 手工注入方法,方便大家测试程序漏洞
推荐阅读
-
ThinkPHP中redirect用法分析
-
thinkphp5.1 框架钩子和行为用法实例分析
-
thinkphp多层MVC用法分析_php实例
-
thinkphp的静态缓存用法分析_PHP
-
ThinkPHP中__initialize()和类的构造函数__construct()用法分析,thinkphp构造函数
-
Zend Framework教程之MVC框架的Controller用法分析,zendmvc_PHP教程
-
ThinkPHP3.1新特性之多层MVC的支持_PHP教程
-
ThinkPHP模板输出display用法分析,thinkphpdisplay_PHP教程
-
ThinkPHP中__initialize()和类的构造函数__construct()用法分析_php实例
-
thinkphp常见路径用法分析,thinkphp路径用法_PHP教程