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

来源:互联网 发布:倚天现货交易软件 编辑:程序博客网 时间:2024/05/20 18:02

  摘要:整理下在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理解深度不够,只能先这样理解,后续实时更新。



<完>

0 0