欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

thinkphp3.2视图模型,各种报错和调试得到的心得

程序员文章站 2024-02-03 18:03:52
...
把thinkphp3.2版本的视图模型的错误都折腾了一个遍
namespace Home\Model;
use Think\Model\ViewModel;
class ViewFriendsModel extends ViewModel {

public $viewFields = array(
'friend'=>array('id','uid','fid','truename','addtime','typeid','status'),
'user'=>array('nickname', '_on'=>'friend.fid=user.id'),
);

}

1. 命名空间 namespace Home\Model;

这个一定要写在第一行,如果出现报错, 那就说明不是第一行, 有时候命名看到就是第一样,但是还是报错, 这种情况少数但是还是有,那是因为文件有BOM报头。一般出现这种情况的话很多时候是因为用记事本编辑过。解决方法有很多,用dreamweaver的话就是 找到这个文件,修改->页面属性->标题编码,把 包括Unicode签名(BOM)(s) 前面的勾去掉。

2. 引用命名空间 use Think\Model\ViewModel;

这个很多同学会忽略掉 。 因为很多同学贪图方便,把之前的模型文件复制过来,把文件名称改一下就可以写视图。 你要注意,你之前的模型是不是引用命名空间是这样的:use Think\Model 。

3. 继承类 class FriendsModel extends ViewModel

这个类是ViewModel ,而不是Model。视图的类是有区别的。

4. 表名 friend,user

这个是你数据库里面的表名称, 然后TP会以这个名字作为这个表名的别名, 如果你在配置里面设置了前缀,记得不要再把前缀写上去可以减少码字,我在数据库里面的名称是n_friend,n_user。
最后的表现形式是这样 : select * from n_friend friend join n_user user on friend.uid=user.id

5. 关联表 _on

这个跟上面3一样,表名称不要写前缀。

6. 文件名称

这个也是要注意的,文件名称必须首字母大写,而且在代码里面的类名称要跟文件名的一样,比如文件名称是FriendsModel.class.php,那么类名词就应该是FriendsModel ,首字母都要大写。

而且需要注意,文件名不要有下横线 “_” 。有些同学喜欢这样命名 User_ViewModel.class.php 。呵呵,TP的视图机制应该是系统不识别的。应该这样写UserViewModel.class.php

7. 控制器调用

实例化模型必须要用D(),如果用M()那是不对的。我在控制器里面是这样的

D(‘ViewFriends’)->select();

8. 调试视图模型

调试thinkphp3.2版本的视图模型的时候,可以用这个方法

echo D('ViewFriends')->getLastSql();

用TP提供的getLastSql()方法来把语句打印出来。然后把这个语句拿到mysql数据库里面运行看看报什么错,根据这个错调试我们的sql语句

9. 视图的where()

视图的where方法应该是这样用的 where('friend.fid=%d',$fid) 要标明是那个表

欢迎加入qq群一起探讨更多的thinkphp问题: 323899029

AD:真正免费,域名+虚机+企业邮箱=0元