首頁 >php教程 >php手册 >thinkphp3.2视图模型,各种报错和调试得到的心得

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

WBOY
WBOY原創
2016-06-07 11:39:581322瀏覽

把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元

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn