thinkphp框架使用心得
接触的第一个PHP框架就是TP,在使用的了一段时间后就放弃了,说实话TP的弊端挺多,之后又接触laravel框架,慢慢的就爱上laravel这个框架了。这段时间由于公司的原因,又不得不使用thinkphp框架,在这里分享下使用心得。
TP框架这一块,框架的耦合度高,整体代码半面对对象半过程化,整体使用起来不够方便,语义化很差;TP的默认路由还算不错;MVC这一块,控制器和应用请求、视图耦合度很高,几乎没有对请求进行封装,视图模板不支持深层次的继承,模板标签太多不够简洁(虽然每个标签都有最适合的应用场景),模型这块没有独立的查询构建器,而这一部分的职责基本由Model和DB类共同承担了,关联模型这块没有提供很好的预载入功能,存在N+1的问题;TP没有提供丰富的服务层代码,也没有明显的服务层概念,控制器之间的功能共享除了继承没有更好的方式;TP对于错误处理是通过返回值一层一层迭代的,而不是使用异常,程序越复杂,职责约分离迭代次数就越多
表单验证心得:
TP没有提供请求层的封装,请求通过路由直接进入控制器,并且TP的验证服务也是直接硬编码到Model里面,并通过create方法触发,create方法会完成数据字段的过滤,别名处理,验证处理,和自动填充等,由于实际情况中很多时候我们的表比较复杂,表中很多字段并不需要客户端的数据提交,例如:创建时间、状态、操作用户等等,那么只使用create方法做过滤是不够的,这个时候这个任务就会交给控制器去做,控制器中的每个方法对应前端用的一个用户请求,秉着客户端的提交都是危险的,那么在这里我们需要对提交的参数进行筛选。
总结:控制器中做提交参数的筛选,然后由模型来做数据验证
在laravel中有独立的请求层,并且验证是独立的服务。
客户端请求通过路由进入控制器,在进入控制器之前,laravel会通过参数的类型约束,利用反射技术来获取当前请求的实例,并根据请求定义的验证规则,调用验证服务,如果验证不通过则报一个系统异常,laravel会捕获这个异常并作出相应的处理,也就是说如果用户请求不符合规定,这请求都无法进入控制器
在这里并不是拿thinkphp和laravel做对比,因为他两压根就没有可比性,在这里只是说说别人的设计思路,这个真的很好
thinkphp框架使用心得的更多相关文章
- thinkphp框架的路径问题 - 总结
thinkphp框架的路径问题 - 总结 (2011-06-21 11:01:28) 转载▼ 标签: thinkphp 框架 路径 杂谈 分类: Php TP中有不少路径的便捷使用方法,比如模板中使用 ...
- 攻城记:Thinkphp框架的项目规划总结和踩坑经验
一.项目模块规划 1.项目分为PC端.移动端.和PC管理端,分为对应目录为 /Application/Home,/Application/Mobile,/Application/Admin: 对应入口 ...
- ThinkPHP框架的一些基础应用
这是俺滴师傅给俺传授了的知识,特在此分享. TP框架,做PHP开发的都应该有所耳闻.下面,我们就来说说入口文件的生成: 创建新项目时,首先,在目录文件下创建一个新的文件夹.然后将Thinkphp框架文 ...
- 关于在BAE上部署ThinkPHP框架的问题
现在有点小兴奋,因为在在BAE上部署ThinkPHP框架的问题快折腾一天了,午觉都没睡,不过没白整总算有点结果.不扯淡了,直入正题吧. 之前熟悉ThinkPHP框架,想在BAE上用ThinkPHP做点 ...
- 番外一:关于thinkphp框架下的文件导入路径问题
总的来说,要使在thinkphp框架下面HTML导入的图片.css文件和js文件有效,只有两种方法:(1)使用绝对路径:(2)在项目目录下创建新目录Public,把所有的img文件夹.js文件夹和cs ...
- 【PHP】基于ThinkPHP框架搭建OAuth2.0服务
[PHP]基于ThinkPHP框架搭建OAuth2.0服务 http://leyteris.iteye.com/blog/1483403
- thinkphp框架下404页面设置
404页面即系统在找不到请求的操作方法和找不到请求的控制器名称时的一种报错行为的优化. 第一步:在thinkphp框架中的Home/Comtroller中建一个EmptyController.clas ...
- [2012-4-10]ThinkPHP框架被爆任意代码执行漏洞(preg_replace)
昨日(2012.04.09)ThinkPHP框架被爆出了一个php代码任意执行漏洞,黑客只需提交一段特殊的URL就可以在网站上执行恶意代码. ThinkPHP作为国内使用比较广泛的老牌PHP MVC框 ...
- ThinkPHP框架的部署
1.将ThinkPHP框架的框架文件放到想要放置的地方,与创建的应用文件夹同级 2.vhost文件中设置虚拟目录 3.在hosts文件中配置 4.在应用目录中创建入口文件index.php 5.在入口 ...
随机推荐
- 批处理at命令--一切尽在计划中
让计算机在自己规定的时间里干自己规定的事,一切尽在计划之中.所以at命令你一定不能错过. 概述 列出在指定的时间和日期在计算机上运行的已计划命令或计划命令和程序,以及设置在指定时间和日期在计算机上运行 ...
- linux 下查看网速的方法 (不需要安装任何软件)
sudo watch -n 1 "/sbin/ifconfig eth0 | grep -E \"字节|数据包\"" 若是英文版linux: sudo watc ...
- MongoDB:The Definitive Guide CHAPTER 1 Introduction
MongoDB is a powerful, flexible, and scalable data store. It combines the ability to scale out with ...
- Java中的三目运算符 详解
对于有些选择分支结构,可以使用简单的条件运算符来代替. 如: if(a<b) min=a;else min=b; 可以用下面的条件运算符来处理 min=(a<b)?a:b; 其 ...
- 【转】Cannot change version of project facet Dynamic Web Module to 3.1 (Eclipse Maven唯一解决方案)
If you want to use version 3.1 you need to use the following schema: http://xmlns.jcp.org/xml/ns/jav ...
- Android-Wheel-Menu
https://github.com/anupcowkur/Android-Wheel-Menu
- mysql 学习笔记5-- 数据库优化
ext4:(rw,noatime,nodiratime,nobarrier,data=ordered)xfs: (rw,noatime,nodiratim,nobarrier,logbufs=8,lo ...
- Ubuntu开机启动svn
一.创建脚本 $cd /etc/init.d/$sudo vim svnserve 内容如下#! /bin/shsudo svnserve -d -r /home/svn 二.脚本权限设置 sudo ...
- 一些as的配置
打开Android Studio首选项对话框(Mac用户选择Android Studio菜单,Windows用户选择File → Settings菜单).分别展开Editor和Code Style选项 ...
- Android低功耗蓝牙(BLE)开发的一点感受
最近一段时间,因为产品的需要我做了一个基于低功耗蓝牙设备的Android应用,其中碰到了一些困难,使我深深体会到Android开发的难处:不同品牌,不同型号和不同版本之间的差异使得Android应用适 ...