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

in 旧文字 with 0 comment

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

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

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

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

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

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

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

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

那么其实正确的姿势应该是

\think\Db::table('think_user')->select();

或者首先

use think\Db;

然后

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

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

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

M('User')->select();

这样的代码了,因为首先M函数没有了,其次,模型的角色已经变化了。 新版的模型查询都是静态方法,不要试图先实例化模型,然后去进行查询,正确的查询是:

User::get(1); User::all(); User::where('id','>',10)->find(); 

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

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

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

5.0在控制器中输出模板,使用方法如下:
如果你的控制器继承了 thinkController的话,使用:

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

如果你没有继承thinkController的话,可以使用:

return view('index/hello');

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

Db::table('think_user')->select();
// 或者
Db::name('user')->select();

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

创建一个User模型类 然后:

User::get(1);

摘录自TP官网

Responses