TP3.2升级TP5踩到的坑

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方式返回数据,而非直接输出;
  • 废除原来的操作前后置方法;
如果你继承think\Controller的话,可以使用:

return $this->fetch('index/hello');
如果你的控制器没有继承 think\Controller的话,使用:

return view('index/hello');

系统常量的废弃

5.0版本相对于之前版本对系统变化进行了大量的废弃,用户如果有相关需求可以自行定义
下面是废除常量

REQUEST_METHOD IS_GET IS_POST
IS_PUT IS_DELETE IS_AJAX 
__EXT__ COMMON_MODULE MODULE_NAME
CONTROLLER_NAME 
ACTION_NAME APP_NAMESPACE 
APP_DEBUG MODULE_PATH等

 

——————————————————  字母函数参照表  —————————————————————————————

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
出处:https://mp.csdn.net/console/editor/html/105730455
个性签名:没有,就占个坑蹲着而已
阿里云:领取海量云产品优惠,服务器五折起步:https://www.aliyun.com/minisite/goods?userCode=tjndc6hg
腾讯云618活动:【腾讯云】618云聚惠,百款云产品限量抢购,1核2G云服务器首年95元https://cloud.tencent.com/act/cps/redirect?redirect=1059&cps_key=67b003b15a96762f5df12787441e6583&from=console

你可能感兴趣的:(PHP)