thinkphp 中模型究竟是什么用?
thinkphp 中模型究竟是什么用?
问题
似乎所有的操作都能在控制器中就能完成,模型除了几种验证之外,究竟是干什么用的,这个问题一直没理解透
解答
解答一
要明白这个问题,必须了解 MVC 历史。早在 MVC 出现以前,程序员是将 html、css、js、php、SQL 写在一个 .php 文件内的,那时的网页非常简单。后来复杂了,需要多个人协同开发,一个开发后台,专写 php + SQL,一个开发前端,专写 html + css + js。形成了 VC 架构,但有个问题,他们之间不是异步开发的,而是同步开发,前端写完模板,phper 才能在上面加 php 代码。如果不小心字符串过长了,样式可能会错乱,又要找前端调整样式。这样工作效率很低。最后 M 出现了,phper 可以在 M 上写 php 代码,写完后,进行单元测试即可。前端在 V 上写 html + css + js 代码,这个过程是异步完成的,彼此之间互不影响,最后拼接的时候,用 C 调用一下 M 获得数据后,再渲染到 V 上即可。C 就是个桥接器而已。但现在的开发模式又变了,出现了很多后台和前台框架,这使得 M 和 V 的地位一下子下降了。很多 M 要完成的功能,后台框架包办了,如 ThinkPHP,很多 V 要完成的功能,前台框架包办了,如 Amaze UI。因为框架技术的发展,导致很多程序员的开发效率大增,开发成本大幅度下降。许多 phper 不需要依赖前端也可以开发出非常出色的网站。使得 MVC 本来为了协同开发而设计出来的模式显得不是那么重要了。所以完全可以用 C 替代 M。但受 ThinkPHP 框架限制,有些功能,如多对多关联模型,只能在 M 中实现。所以有时还是要用 M。有时一套 CMS 中要可以选择多套模板,这时就需要前端分担一些工作量,不然 phper 要累死了。
我发现你对开发的理解很深入啊;同感;尤其伴随着nodejs的崛起;以及angularjs这类mvvm的前端框架盛行;前端的地位越来越重了;不过;我是坚持认为C和M还是要分离的;M中的方法是可以在C中方便调用的;如果直接写在C中就不灵活了;
C 和 M 分离是必需的,比如关联模型,没有 V 什么事,没有必要将这部分逻辑写入 C 中。有时候一些简单的逻辑,比如验证码、取值范围等。我没有用 M,直接用 C 代劳了,节省代码量。这种情况下,可以用 C 完全替代 M。复杂的验证、关联模型等,还是要用到 M 的。前端的职位也很重要,在创业初期可以先用 Amaze UI 框架。到 A 轮融资成功以后,要聘请高级的前端,设计复杂的特效,还有 webapp 的自适应。
我在实际开发中就是,把逻辑和数据库操作的相关方法全就放到了M里,但是似乎C就没什么用一样,完全就是一个调度作用,显得很麻烦,M里的方法放到C里也能实现,这样又显得M是多余的,所以我就怀疑人生了-。-
解答二
操作数据库的
记住模型不只是操作数据库的 它有很多高级功能的。最基本的增删改查,然后是数据的 高级処理。自动完成 自动验证等 很多功能
打个比方 这里只是一个举例,并不保证是最佳操作方法
读取新闻文章
如果页面显示的文章字数多了 替换成...
这个很简单的东西吧。
当然 实现的方法很多
最简单的html中直接用函数处理
或者控制器中处理
但是还有另一个方法
那就是在model层中进行处理
里面有_after_select和_after_find()
在这里面写代码也可以实现的,以后所有查询的都会(注意是D方法查询都会被处理)
这个只是一个实现的方法,还是那句话不保证最佳,只是例子!
thinkphp 中模型究竟是什么用?的更多相关文章
- 关于thinkphp框架中模型笔记
模型这一块,感觉学习的不是很清楚,单独水一贴thinkphp中模型的学习笔记. 0x01 模型类简介 数据库中每一张表对应一个模型,类名就是表名,类里面的成员变量就是列名, 把一张表对应为一个类,其中 ...
- thinkphp在模型中自动完成session赋值
相信用过thinkphp的用户都知道thinkphp的模型可以完成很多辅助功能,比 如自动验证.自动完成等,今天在开发中遇到自动完成中需要获取session值 然后自动赋值的功能,具体看代码:clas ...
- ThinkPHP中的模型二
ThinkPHP中的模型 1.为什么要创建数据对象 案例:使用ThinkPHP完成部门管理 ① 设计数据库 ② 创建Dept控制器 路径:./Application/Admin/Controller创 ...
- ThinkPHP中的模型
ThinkPHP中的模型 1.什么是模型(Model) 模型表示企业数据和业务规则,实际项目开发中,主要实现与数据库进行操作. 2.模型的定义规则 模型类的命名规则是除去表前缀的数据表名称,采用驼峰法 ...
- ThinkPHP中的模型命名
当我们创建一个UserModel类的时候,其实已经遵循了系统的约定.ThinkPHP要求数据库的表名和模型类的命名遵循一定的规范,首先数据库的表名和字段全部采用小写形式,模型类的命名规则是除去表前缀的 ...
- [转]ThinkPHP中实例化对象M()和D()的区别,select和find的区别
1.ThinkPHP中实例化对象M()和D()的区别 在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会 ...
- ThinkPHP 中M方法和D方法详解----转载
转载的地址,http://blog.163.com/litianyichuanqi@126/blog/static/115979441201223043452383/ 自己学到这里的时候,不能清除的分 ...
- ThinkPHP 中M方法和D方法的具体区别(转)
M方法和D方法的区别 ThinkPHP 中M方法和D方法都用于实例化一个模型类,M方法 用于高效实例化一个基础模型类,而 D方法 用于实例化一个用户定义模型类. 使用M方法 如果是如下情况,请考虑使用 ...
- ThinkPHP 的模型使用详细介绍--模型的核心(七)
原文:ThinkPHP 的模型使用详细介绍--模型的核心(七) 注意:本节是ThinkPhp框架对数据操作的核心处理部分 大家还是在这里看清楚可以将其剪切放到代码编辑器中查看 本章节给大家着重介绍模型 ...
随机推荐
- zzulioj--1780--和尚特烦恼6——炒股(贪心)
1780: 和尚特烦恼6--炒股 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 154 Solved: 87 SubmitStatusWeb Boa ...
- JavaScript学习记录四
title: JavaScript学习记录四 toc: true date: 2018-09-16 20:31:22 --<JavaScript高级程序设计(第2版)>学习笔记 要多查阅M ...
- 三个获取浏览器URL中参数值的方法
这三个是一般的获取浏览器传的参数值的方法,之前有用unescape()解码的方法,但是遇到汉字会产生乱码,所以用decodeURI(); 方法一: function getQueryString(na ...
- 在Jquery里格式化Date日期时间数据
在Jquery里格式化Date日期时间数据: $(function(){ //当前时间格式化yyyy-MM-dd HH:mm:ss alert(timeStamp2String(new Date(). ...
- HD-ACM算法专攻系列(13)——How Many Fibs?
问题描述: 源码: import java.math.BigInteger; import java.util.*; public class Main { //主函数 public static v ...
- jqGrid添加删除功能(不和数据库交互)
jqGrid添加删除功能(不和数据库交互) 一.背景需求 项目中需要在前端页面动态的添加行,删除行,上下移动行等,同时还不和数据库交互.一直在用jqGrid展示表格的我们,从没有深入的研究过它,当然看 ...
- C++ STL next_permutation() prev_permutation(a,a+n)用法。
int a[3] = {1,2,3}; a可能形成的集合为{1,2,3},{1,3,2},{2,1,3},{2,3,1},{3,1,2},{3,2,1}. {2,1,3}的prev是{1,3,2}, ...
- asp.net 连接字符串的多种写法
一.使用OleDbConnection对象连接OLE DB数据源 1.连接Access 数据库 Access 2000: “provider=Microsoft.Jet.Oledb.3.5;Data ...
- array_key_exists()
array_key_exists()方法用于检查键名是否存在数组中. <?php $a=array("name"=>"XC90","tex ...
- requests 后续1
发送带数据post请求 import requests # 发送post请求 data = { } response = requests.post(url, data=data) # 内网 需要 认 ...