原文:thinkphp学习笔记7—多层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学习笔记7—多层MVC相关推荐

  1. thinkphp学习笔记10—看不懂的路由规则

    原文:thinkphp学习笔记10-看不懂的路由规则 路由这部分貌似在实际工作中没有怎么设计过,只是在用默认的设置,在手册里面看到部分,艰涩难懂. 1.路由定义 要使用路由功能需要支持PATH_INF ...

  2. thinkphp学习笔记8—命名空间

    原文:thinkphp学习笔记8-命名空间 新版本(3.2)中采用命名空间的方式定义和加载类库文件,解决多个模块之间的冲突问题,并实现了更加高效的自动加载机制. 需要给类库定义所在的命名空间,命名空间 ...

  3. 深度学习入门之PyTorch学习笔记:多层全连接网络

    深度学习入门之PyTorch学习笔记 绪论 1 深度学习介绍 2 深度学习框架 3 多层全连接网络 3.1 PyTorch基础 3.2 线性模型 3.2.1 问题介绍 3.2.2 一维线性回归 3.2 ...

  4. 【HeadFirst 设计模式学习笔记】13 MVC分析

    作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1.M-V-C --Model--View--Controller,模式-视图-控制器,这是一种范型.模型对象正 ...

  5. ThinkPHP 学习笔记 ( 一 ) 项目部署:应用部署方式与模块分组部署方式

    /*** ThinkPHP version 3.1.3*/ ThinkPHP ( 官方网站:http://www.thinkphp.cn/ ) 目前最新版本是 3.2.2,它要求 PHP 的版本高于 ...

  6. 【theano-windows】学习笔记十——多层感知机手写数字分类

    前言 上一篇学习了softmax, 然后更进一步就是学习一下基本的多层感知机(MLP)了. 其实多层感知机同时就是w*x+b用某个激活函数激活一下, 得到的结果作为下一层神经元的输入x, 类似于 ou ...

  7. 《Pro ASP.NET MVC 3 Framework》学习笔记之一【MVC的历程,优点,HelloWorld】

    序论:asp.net mvc出现已经有两三年的时间了(2009开始1.0版本),但是这么方面的中文学习资料仍然非常少,特别是asp.net mvc3,几乎就没有中文的学习书籍.在英文的书籍中有两本是非 ...

  8. 2011斯坦福大学iOS应用开发教程学习笔记(第一课)MVC.and.Introduction.to.Objective-C

    2011年冬季斯坦福大学公开课 iOS应用开发教程是个很经典的教程,这个老头讲的很给力.做笔记总结. 第一课名称: MVC and Introduction to Objective-C 这课的主要内 ...

  9. ThinkPHP学习笔记(三)有关项目中URL的路径问题和使用frame搭建页面的

    在thinkphp中有很多自定义的常量路径,具体如下: // echo "<div style='font-weight:normal;color:blue;float:left;wi ...

最新文章

  1. python 获取用户ip_Python爬虫教程:你还在苦苦拉票吗?刷票小程序案例原理剖析!...
  2. 【转】二层交换机之间的跨网段访问
  3. object-c语言的nonatomic,assign,copy,retain的区别
  4. python的openpyxl库如何读取特定列_通过渲染一百万个网页,来了解网络是如何崩溃的...
  5. mongodb2.2.1安装
  6. Database学习 - mysql数据类型
  7. python widnows mysql_python用Windows开发配置mysql数据库
  8. chrome下老是弹出网页显示 true
  9. HDU 4336:Card Collector 期望+状压
  10. 京东方、立讯精密纷纷向苹果靠拢,再次撕下国产手机遮羞布
  11. [Android]从canDrawOverlays权限获取错误说起
  12. Tk/Tkx滚动条的使用
  13. 毕业设计微信小程序选题
  14. 数据结构 —— 队列、栈、链表的区别
  15. 学习项目---文件查重
  16. 计算KL距离的几个例子
  17. React:Redux和Flux
  18. 2021011206贾天乐实验五
  19. PPT结尾页只有“谢谢”?你out了!聪明人都这样结尾,礼仪满满
  20. vb.net 教程 5-12 绘图实例之统计图1

热门文章

  1. windows云服务器价格_免费windows云服务器
  2. (三)硕博生常用的英文文献下载的网站
  3. FPGA之道(77)静态时序分析(三)同步时序逻辑的分析原理
  4. FPGA之道(36)Verilog中的编译指令
  5. RabbitMQ学习总结(2)——安装、配置与监控
  6. 云计算会杀死开源吗?
  7. PHP JSON_ENCODE 不转义中文汉字的方法
  8. [logstash-input-file]插件使用详解
  9. Java二进制位运算、移位运算、、
  10. 使用rel=noopener