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理解深度不够,只能先这样理解,后续实时更新。
<完>
- ThinkPHP 实际开发中 零碎问题整理
- iOS开发零碎知识点整理
- 零碎的开发问题
- 开发问题零碎总结
- 在实际开发中遇到的问题?
- Android应用开发零碎知识整理
- 关于android的零碎问题的整理
- 零碎整理
- iOS中一些零碎的整理
- js中零碎点的整理
- 实际开发问题
- thinkphp零碎知识点。
- thinkphp登录页面问题整理
- 实际开发中LayoutInflater
- 实际项目开发中遇到的问题及解决办法
- Android实际开发问题03------ListView中添加Edittext
- popwindow实际开发使用中出现的问题(三)
- popwindow实际开发使用中出现的问题(四)
- [置顶]新的博客
- 第八章 ios图片上传
- Java常用排序算法及性能测试集合
- 第十三课坐标计算---坐标扩展命令
- svn 命令行创建分支、合并主干
- ThinkPHP 实际开发中 零碎问题整理
- LeetCode : 9. Palindrome Number
- iOS蓝牙调用的一般流程-CBPeripheralManagert和CBCentralManager
- 纸上谈兵没有大智慧
- Handler sendMessage 与 obtainMessage (sendToTarget)比较
- android菜鸟之路-事件分发机制总结(一)
- 《转》OpenStack组件keystone与LDAP协议集成(OpenLDAP和Active Directory)
- BJFU-ACM-1473【红】sunshine16被困了
- 在java中实现远程方法调用