TP5: M 方法 替换为 Db::name、S 方法 替换为 session、I 方法 替换为 input、U 方法 替换为 url
字母函数下边整理了一个表,可供参考
IS_POST 替换为 request()->isPost()
所以不能使用I('request.X'),可用Request::instance()->param();或者request()->param获取提交参数
控制器不用强制加Controller
查询:
TP3.2:M("XXXX")->field($field) ->join("left join tab_user u on p.create_user=u.user_id") ->select();//表名重命名可用as
获取单个字段数值用getField,新增数据用add
TP5: 模型->field($field) ->join(" tab_user u“,” p.create_user=u.user_id",“LEFT”) ->select();//表名重命名不可用as,
主表用alias重命名,联表啥都不用,直接用表名+空格+重命名名称
获取单个字段数值用column,新增数据用create,insert代替add,更新用update代替save
TP3.2 有ajaxReturn,模板输出用:$this->display(""); 定义:例如:define('IN_ECS',“true”);
TP5 替换成return json($result),模板输出用:return $this->fetch(),对于直接访问模板,可使用return view() define('IN_ECS',true);去掉引号
有的人说TP5之后访问多模块总是出现问题,不管怎么访问都会出现访问到index.php/index/index这类默认入口
其实字TP5之后路由都可以自己设置,如果没设置好就会出现类似这种情况,可在pathinfo_fetch中后加一个request_uri
// 兼容PATH_INFO获取
'pathinfo_fetch' => ['ORIG_PATH_INFO', 'REDIRECT_PATH_INFO', 'REDIRECT_URL', 'REQUEST_URI']
如果这样还出错,那就直接用TP5默认的访问方式就行了【域名/模块/控制器/方法】这样的访问方式不香吗?
TP5中也取消了TP3.2中的部分常量,比如:IS_AJAX,在TP5中集中在request()这个函数中,我们判断是否是ajax提交,
可用:request()->isAjax();判断是否是post提交用:request()->isPost()
TP5已经有封装的文件管理类了,所以非跨服务器完全可以用自带的file类解决,但会以下错误:
图片上传 $info->getSaveName() 输出的斜杠反了导致
报错:Call to undefined method SplFileInfo::getSaveName()
原因:
/thinkphp/base.php中的define('DS', DIRECTORY_SEPARATOR);
把“DIRECTORY_SEPARATOR”直接写死为“/”.
我觉得应该是DIRECTORY_SEPARATOR在window下转换成“\”了,
DIRECTORY_SEPARATOR是php的内部常量,在windows上返回\,而在linux或者类unix上返回/
如果不想改核心代码,直接用字符串替换即可:
$getSaveName=str_replace("\\","/",$info->getSaveName());
$fileUrl = '/upload/'.$getSaveName;
另外以下内容来自网络整理:
URL的变动
首先对3.X的不严谨给开发者们带来的不正确的引导表示歉意,在5.0版本正式废除类似/id/1方式 可以通过get获取到id的方法,严格来讲这样的url是不属于$_GET的,现在可以通过param获取,具体使用可以通过请求部分查询。
模型的变动
新版的模型查询返回默认对象,系统默认增加了toArray方法,许多开发者在all或select尝试使用toArray来转换为数组,在此希望开发者能理解对象的概念,尝试使用对象进行数据的使用,或者使用db方法进行数据库的操作,也提醒一下部分滥用toArray的开发者,all或select结果是对象的数组集合,是无法使用toArray进行转换的。
新版变化
命名规范
- 目录和文件名采用‘小写+下划线’,并且以小写字母开头;
- 类库、函数文件统一以.php为后缀;
- 类的文件名均以命名空间定义,并且命名空间的路径和类库文件所在路径一致(包括大小写);
- 类名和类文件名保持一致,并统一采用驼峰法命名(首字母大写)
函数
- 系统已经不依赖任何函数,只是对常用的操作封装提供了助手函数;
- 单字母函数废弃,默认系统加载助手函数,具体参考上一个章节‘助手函数’;
路由
5.0的URL访问不再支持普通URL模式,路由也不支持正则路由定义,而是全部改为规则路由配合变量规则(正则定义)的方式,具体这里不再赘述。
控制器
控制器的命名空间有所调整,并且可以无需继承任何的控制器类。
- 应用类库的命名空间统一为app(可修改)而不是模块名;
- 控制器的类名默认不带
Controller
后缀,可以配置开启controller_suffix
参数启用控制器类后缀; - 控制器操作方法采用
return
方式返回数据,而非直接输出; - 废除原来的操作前后置方法;
系统常量的废弃
5.0版本相对于之前版本对系统变化进行了大量的废弃,用户如果有相关需求可以自行定义
下面是废除常量
—————————————————— 字母函数参照表 —————————————————————————————
3.2版本 | 5.0版本 |
C | config |
E | exception |
G | debug |
L | lang |
T | 废除 |
I | input |
N | 废除 |
D | model |
M | db |
A | controller |
R | action |
B | 废除 |
U | url |
W | widget |
S | cache |
F | 废除 |
作者:Mark