thinkphp多层MVC用法分析
ThinkPHP  /  管理员 发布于 8年前   149
本文实例讲述了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 逻辑层Home/Logic/UserLogical.class.php 服务层Home/Service/UserService.class.php 在调用的时候可以使用内置的D方法或M方法经行调用 调用默认的模型层Model下的数据存取接口类的时候没有第二个参数模型文件名称,默认的模型层是Model,也可以更改设置如下: 可以看到使用D('User')默认情况下会去实例化UserLogice类了,这个是很灵活的,如果我们数据验证,自动完成是在js里面完成的,而取数据是从service接口中完成的,这样完全可以只要一个Service层,其他的层就不需要了。 2.视图层View 视图层由模板和模板引擎组成,常见的第三方模板是.tpl,可以直接在模板中使用php代码,视图的多层可以简单的使用目录(模板主题)来区分,例如: View/default/User/add.html 复杂一点的多层视图还可以使用不同的视图目录来区分例如: view 普通视图层目录 这样不同的模板可以使用不同的页面风格,还可以默认视图目录,如下: 3.控制器层Controller ThinkPHP的控制器有两种类别,一种是核心控制器,一种是业务控制器,核心控制器在ThinkPHP目录下,例如thinkphp\ThinkPHP\Library\Think\Controller\HproseController.class.php,负责应用的调度控制,包括Http请求的拦截,转发,加载配置等。我们这里要讨论的是业务控制器,由用户自己定义的控制器类完成,多层业务控制器的实现原理和模型的分层类似,例如业务控制器和事件控制器, 事件这个还没有用过,看上去很高上大,web开发中的用户事件很少,大多数在js中完成。 访问控制器Home/Controller/UserController.class.php定义如下: 事件控制器Home/Event/UserEvent.class.php的定义如下: UserContrlller负责外部交互响应,通过URL请求响应,例如http://serverName/User/index,UserEvent负责内部事件响应并且只能在内部调用A('User','Event');同样我们可以设置默认的控制器层: 在MVC的三层中,ThinkPHP并不依赖M和V,可以只有C或者只有V,用户只需要定义视图,在没有C的情况下也能自动识别,但是这种怪异的写法会让很多刚刚入门的程序员非常的迷惑。 多层设计在目前的项目中还没有用到,在.net项目中倒见到很多,下次用到再做补充。 更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》及《ThinkPHP常用方法总结》 希望本文所述对大家基于thinkPHP框架的PHP程序设计有所帮助。namespace Home\Model;use Think\Model;class UserModel extends Model{}
namespace Home\Logic;use Think\Model;class UserLogic extends Model{}
namespace Home\Service;use Think\Model;class UserService extends Model{}
D('User') //实例化UserModelD('User','Logic') //实例化UserLogicD('User','Service') //实例化UserService
这样的话实例化方法就需要相应的修改了D('User') //实例化UserLogicD('User','Model') //实例化UserModelD('User','Service') //实例化UserService
View/blue/User/add.html
mobile 手机端访问视图层目录Controller/UserController //用于用户的业务逻辑控制和调度Event/UserEvent //用于用户的事件响应操作
namespace Home\Controller;use Think\Controller;class UserController extends Controller{}
namespace Home\Event;use Think\Controller;class UserEvent extends Controller{}
内部和外部是隔离的,多层控制器也不是强制的,可以根据应用的需要自由的分层,控制器里可以根据需要调用不同的分层模型,也可以显示不同的分层视图,实现不同的主题。您可能感兴趣的文章:
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号