本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》及《ThinkPHP常用方法总结》
希望本文所述对大家基于thinkPHP框架的PHP程序设计有所帮助。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 羽泉《给未来的你&天黑天亮》[WAV+CUE][968M]
- 庄心妍《我也许在等候》[低速原抓WAV+CUE]
- 王雅洁《小调歌后2》[原抓WAV+CUE]
- 中国武警男声合唱团《辉煌之声1天路》[DTS-WAV分轨]
- 紫薇《旧曲新韵》[320K/MP3][175.29MB]
- 紫薇《旧曲新韵》[FLAC/分轨][550.18MB]
- 周深《反深代词》[先听版][320K/MP3][72.71MB]
- 李佳薇.2024-会发光的【黑籁音乐】【FLAC分轨】
- 后弦.2012-很有爱【天浩盛世】【WAV+CUE】
- 林俊吉.2012-将你惜命命【美华】【WAV+CUE】
- 晓雅《分享》DTS-WAV
- 黑鸭子2008-飞歌[首版][WAV+CUE]
- 黄乙玲1989-水泼落地难收回[日本天龙版][WAV+CUE]
- 周深《反深代词》[先听版][FLAC/分轨][310.97MB]
- 姜育恒1984《什么时候·串起又散落》台湾复刻版[WAV+CUE][1G]