前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TP3.2升级TP5踩到的坑

TP3.2升级TP5踩到的坑

作者头像
黄啊码
修改2020-05-29 11:27:41
2.5K0
修改2020-05-29 11:27:41
举报

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("");

TP5 替换成return json(result),模板输出用:return this->fetch(),对于直接访问模板,可使用return view()

有的人说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("\\","/",

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

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

return view('index/hello');

系统常量的废弃

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

代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-05-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 图片上传 $info->getSaveName() 输出的斜杠反了导致
  • 报错:Call to undefined method SplFileInfo::getSaveName()
  • 另外以下内容来自网络整理:
    • URL的变动
      • 模型的变动
        • 新版变化
          • 命名规范
            • 函数
              • 路由
                • 控制器
                  • 系统常量的废弃
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档