ThinkPHP 实际开发中 零碎问题整理

  摘要:整理下在ThinkPHP开发中发现的小问题及解决方案,整理在此。

一 . AJAX返回、跳转和重定向

  场景重现:之前的代码逻辑是通过取得POST过来的数据,进行数据库操作后,通过ajaxRetrun()方法返回成功或失败标志。现在需要增加功能,在ajaxRetrun()方法后面再添加其他逻辑代码,发现这些代码都没有被执行。
  跟踪后发现了问题是该方法最后使用exit()函数返回了需要ajax返回的数据,所以执行完该方法,脚本就退出了。
  因此,还实验了跳转和重定向的问题,总结如下:

1.1 AJAX返回

在控制器中调用:

$this->ajaxReturn($data,'json');

该方法是Think\Controller命名空间下的一个方法,具体位置是:/ThinkPHP/Library/Think/Controller.class.php
查看该方法源码,可发现它是使用exit()函数返回json格式化以后的内容,并退出脚本。
所以控制器中ajaxReturn()函数后面的代码肯定是执行不了的。

1.2 跳转

在控制器中调用:

$this->success('测试跳转!','test',3);

该方法也是Think\Controller命名空间下的一个方法,并调用了Think\View命名空间下的display方法。
由于水平有限,该方法涉及到ThinkPHP模板引擎,故这里代码没有继续trace下去。
实际测试结果是跳转后的代码可以执行

1.3 重定向

在控制器中调用:

$this->redirect('test');

该方法也是Think\Controller命名空间下的一个方法。
该方法中调用了公共函数库里的redirect()函数,公共函数库的具体位置是:/ThinkPHP/Common/functions.php
继续trace发现该函数最后也是调用exit()函数。
所以在重定向后面的代码也是执行不了的。

二 . 关于自定义模型类$this的使用

  在PHP的语法-类定义-$this的解释是这样的:不管在对象的内部还是外部,访问对象的成员(属性或方法),都需要通过对象的引用变量,当对象被创建以后,在对象内部,则使用\$this这个对象引用。
  在ThinkPHP的控制器中,我们使用:

$this->方法名();

  这种方法。trace过程如下:

  • 自定义的控制器都是继承Controller控制器的;
  • 所以这样使用大部分都是在使用系统的Controller控制器里面的方法

  而在ThinkPHP自定义模型类里面使用$this是这样的逻辑:

  • 当我在自定义的模型类里面定义好几个关于数据表名称的属性;
  • 比如tableName,tablePrefix,注意这些属性都要是protected类型的;
  • 我们在使用D()方法实例化自定义模型类以后,就可以对该对象进行连贯操作、增删改查;
  • 类似的可以在自定义模型类里面使用$this做连贯操作、增删改查;

  ps.由于水平有限、TP理解深度不够,只能先这样理解,后续实时更新。



<完>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值