ThinkPHP5.0学习须知和常见问题集

3816

ThinkPHP5.0学习方式和常见问题集

整理了下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版本库上已经进行了修正,并不代表下载包会及时更新。同时在线完全开发手册也是针对最新的版本库进行同步更新,如发现用法不符,请及时更新到最新的框架版本

下面是作为一个新手(我们姑且称之为新手吧~)经常会问到的问题列表,稍加整理,以后会增补:

1、为啥单字母函数去掉了?

单字母函数是TP历史上争议较大的问题,应该说单字母函数的诞生是有历史原因的,但已经到了退出历史舞台的时候了,可能很多人习惯了单字母函数带来的便捷(虽然同时我们也饱受着某些学院用户的抱怨),基于几个原因:
(1)5.0 核心已经不依赖任何函数 只是对常用的操作封装提供了助手函数
(2)助手函数是可以完全自己定义和修改,并不影响其他的使用 
(3)现在的IDE提示和自动完成功能已经非常强大了,所以用不用助手函数 或者是否需要改成原来的单字母函数 全凭开发者个人意愿 

核心框架不依赖任何助手函数,系统只是默认加载了助手函数,配置如下:

  1. // 扩展函数文件定义

  2. 'extra_file_list'   => [THINK_PATH . 'helper' . EXT],

复制代码

因此,你可以随意修改助手函数的名称或者添加自己的助手函数,然后修改配置为:
  1. // 扩展函数文件定义

  2. 'extra_file_list'   =>  [ APP_PATH . 'helper' . EXT],

复制代码

2、数据库查询和模型怎么用?


官方开发手册的所有示例代码为了简洁明了,省略了所有 think 命名空间的类调用,也就是说 如果示例里面的代码是

  1. Db::table('think_user')->select();

复制代码


那么其实正确的姿势应该是
  1. \think\Db::table('think_user')->select();

复制代码

或者首先
  1. use think\Db;

复制代码


然后
  1. Db::table('think_user')->select();

复制代码


这里,我首先要说声抱歉,3.2的函数封装方式某种意义上掩盖了命名空间的调用问题,让大家感觉不到命名空间的存在意义和调用机制,傻瓜式地在使用,如果5.0还不能让你们清醒认识并掌握到命名空间应该是怎么调用的话,那么我奉劝你可以退出开发者的行列了。 

下面来说说关于数据查询的问题,原来在模型里面的数据查询,现在Db类都能完成,并且支持所有的连贯操作方法。 不要试图再使用
  1. M('User')->select();

复制代码


这样的代码了,因为首先M函数没有了,其次,模型的角色已经变化了。 新版的模型查询都是静态方法,不要试图先实例化模型,然后去进行查询,正确的查询是:
  1. User::get(1); User::all(); User::where('id','>',10)->find(); 

复制代码


模型的静态查询返回的才是模型对象实例,每个模型拥有自己的属性和方法。

3、关于配置参数的问题


很多的配置参数或者配置层次都和之前不同了,我建议大家要么看看代码,要么仔细通读下官方的开发手册,不要因为配置的问题浪费自己一整天的时间。

4、怎么才能在控制器中正确的输出模板

5.0在控制器中输出模板,使用方法如下:

如果你的控制器继承了 think\Controller的话,使用:

  1. return $this->fetch('index/hello');

复制代码

如果你没有继承think\Controller的话,可以使用:
  1. return view('index/hello');

复制代码

5、没有创建模型类怎么查询?

原先版本的M方法可以支持不用创建类进行查询,新版如何处理呢? 
首先,我们要搞明白一个,查询是Db类的事情,如果只是查询数据表的数据到一个数组,那么直接使用

  1. Db::table('think_user')->select();

  2. // 或者

  3. Db::name('user')->select();

复制代码

就可以了,如果你要返回一个模型对象(为啥要对象 这个可能目前你还不一定能理解),则使用下面的方式:

创建一个User模型类 然后:
  1. User::get(1);


转载来源:http://www.thinkphp.cn/topic/38624.html