整理了下TP5.0的常见问题,希望给新手带来帮助吧,类似的问题在V5交流群里面一天要问个百八次的 ^_^
目前最佳的V5教程是官方的 《 ThinkPHP5.0快速入门 》
首先不要带着3.2版本的思维习惯和定式来理解和使用TP5 ,TP5是一个全新的颠覆重构版本,跨版本发布是经过深思熟虑的结果,不是闹着玩的,在很多方面TP5对原有的开发模式进行了颠覆,这其中最大的莫过于对模型和数据库的重构了。从某种意义上来说,如果你不彻底理解5.0的模型用法,那么你将无法正确掌握TP5,就算是你把老项目迁移到5.0上,也不代表你理解5.0的心。
重要说明:想要学习和掌握TP5,必先掌握两个知识:对象和命名空间、对象和命名空间、对象和命名空间,重要事情说三遍。如果你还没有掌握这两个,TP5估计与你无缘了
原有的老版本开发的项目将很难升级到5.0版本,至少从5.0RC3版本开始,这一问题显得非常的越来越明显,如果你试图这么做,那么请确保你有足够的能力,因为不要指望官方会浪费时间在老版本的兼容和升级上来,我们已经下决心彻底放弃兼容升级的可能,并重新评估哪些方面的不良习惯是需要纠正的。
所以请不要在讨论区或者QQ群反复问下面三个问题:
1、RC3以后还是否会有调整(会有调整,但不会有重大调整了)
2、是否支持原有项目的升级(梦想很美丽,现实很残酷^_^)
3、5.0正式版什么时候发布(我们会尽量按照原计划今年上半年发布新版)
如果你有发现问题,请使用最新版本的github版本测试是否依然还有问题,同时官方对反馈问题的修正只是表明我们在github版本库上已经进行了修正,并不代表下载包会及时更新。同时在线完全开发手册也是针对最新的版本库进行同步更新,如发现用法不符,请及时更新到最新的框架版本
下面是作为一个新手(我们姑且称之为新手吧~)经常会问到的问题列表,稍加整理,以后会增补:
单字母函数是TP历史上争议较大的问题,应该说单字母函数的诞生是有历史原因的,但已经到了退出历史舞台的时候了,可能很多人习惯了单字母函数带来的便捷(虽然同时我们也饱受着某些学院用户的抱怨),基于几个原因: // 扩展函数文件定义 'extra_file_list' => [THINK_PATH . 'helper' . EXT], 复制代码 // 扩展函数文件定义 'extra_file_list' => [ APP_PATH . 'helper' . EXT], 复制代码
(1)5.0 核心已经不依赖任何函数 只是对常用的操作封装提供了助手函数
(2)助手函数是可以完全自己定义和修改,并不影响其他的使用
(3)现在的IDE提示和自动完成功能已经非常强大了,所以用不用助手函数 或者是否需要改成原来的单字母函数 全凭开发者个人意愿
核心框架不依赖任何助手函数,系统只是默认加载了助手函数,配置如下:
因此,你可以随意修改助手函数的名称或者添加自己的助手函数,然后修改配置为:
Db::table('think_user')->select(); 复制代码 \think\Db::table('think_user')->select(); 复制代码 use think\Db; 复制代码 Db::table('think_user')->select(); 复制代码 M('User')->select(); 复制代码 User::get(1); User::all(); User::where('id','>',10)->find(); 复制代码
官方开发手册的所有示例代码为了简洁明了,省略了所有 think 命名空间的类调用,也就是说 如果示例里面的代码是
那么其实正确的姿势应该是
或者首先
然后
这里,我首先要说声抱歉,3.2的函数封装方式某种意义上掩盖了命名空间的调用问题,让大家感觉不到命名空间的存在意义和调用机制,傻瓜式地在使用,如果5.0还不能让你们清醒认识并掌握到命名空间应该是怎么调用的话,那么我奉劝你可以退出开发者的行列了。
下面来说说关于数据查询的问题,原来在模型里面的数据查询,现在Db类都能完成,并且支持所有的连贯操作方法。 不要试图再使用
这样的代码了,因为首先M函数没有了,其次,模型的角色已经变化了。 新版的模型查询都是静态方法,不要试图先实例化模型,然后去进行查询,正确的查询是:
模型的静态查询返回的才是模型对象实例,每个模型拥有自己的属性和方法。
很多的配置参数或者配置层次都和之前不同了,我建议大家要么看看代码,要么仔细通读下官方的开发手册,不要因为配置的问题浪费自己一整天的时间。
5.0在控制器中输出模板,使用方法如下: return $this->fetch('index/hello'); 复制代码 return view('index/hello'); 复制代码
如果你的控制器继承了 think\Controller的话,使用:
如果你没有继承think\Controller的话,可以使用:
原先版本的M方法可以支持不用创建类进行查询,新版如何处理呢? Db::table('think_user')->select(); // 或者 Db::name('user')->select(); 复制代码 User::get(1);
首先,我们要搞明白一个,查询是Db类的事情,如果只是查询数据表的数据到一个数组,那么直接使用
就可以了,如果你要返回一个模型对象(为啥要对象 这个可能目前你还不一定能理解),则使用下面的方式:
创建一个User模型类 然后:
转载来源:http://www.thinkphp.cn/topic/38624.html