# ThinkPHP基础(二)
## 1. 学习目标
- 熟练使用框架配置
- 入口文件
- 熟练使用控制器
- 熟练使用模板标签
## 2. 框架配置
##### 2.1 惯例配置
######2.1.1 什么叫惯例配置?
- 位于核心框架thinkphp文件夹下-->文件名为convention.php的配置信息就叫惯例配置。管理配置呢?在开发过程中,是不做任何改动的,方便后期的升级维护。
######2.1.2 如何测试惯例配置有在该控制器里生效应用呢?
如下操作:
- 把刚在框架配置里配置内容都去了
- 控制器代买如下:
- 核心框架thinkphp下convention.php文件头部加一个标记,方便测试是否能加载到这里的内容,如下:
- 浏览器输出如下内容:
- 总结:
1、浏览器能够输出我们在convention.php文件里添加的配置,说明每一个控制器访问的时候都能够自动加载到惯例配置里的配置。
2、惯例配置内容的获取,除了用think\Config类的get方法获取外,还可以应用助手函数config获取配置文件的配置。
##### 2.2 应用配置
######2.2.1 什么叫应用配置?
- 位于app应用目录同级目录的config文件下的配置文件,不包括再创建的文件夹叫应用配置。应用配置就是这整个应用目录都可以生效使用的配置。
######2.2.2 那么应用配置可以做什么呢?
- 1.整个应用目录都用得到的配置,但是惯例配置里没有
- 2.覆盖惯例配置里需要修改的配置。
我们举个例子:在我们没有去配置应用配置,整个应用项目里应用的都是惯例配置,那么在浏览器输入:think.com 访问的是index模块下的Index控制器index方法
- 3.应用配置里做如下配置:
- 4.浏览器再次输入:think.com
- 综上可以证明:
1. 应用配置里添加配置能够在整个框架中应用,不管是是哪个模块;
2. 应用配置会覆盖惯例配置里的相同项同样的也可以在不同模块的控制器里去dump打印config配置来验证这个结论,只有当你理解了这个关系,才能在开发时得心应手的做好配置。
##### 2.3 扩展配置
###### 2.3.1 什么叫扩展配置?
- config文件夹下创建extra文件夹,在里面创建任意文件名的文件,比如database.php文件。记住哦,文件夹名extra是固定的。
1. database.php文件内容如下。注意:如果是配置关于数据库方面的,关于数据库的配置一定要整体复制修改,否则只剩下修改项,其他配置项就被覆盖了。
2. 配置完毕后,如何测试呢?要想只打印刚配置的内容,只需config文件名,控制器代码如下:
3. 浏览器输出如下:
- 综上证明:
1. 扩展配置如上面操作即可
2. 关于连接数据库的配置,要全部一起复制(就是整个database数组),包括不需要修改的,否则只剩下修改的几项了。现在的tp版本是这样,也许以后也会支持需要修改的才需要复制。database.php连接数据库的配置可以放到config.php里,也可以将整个文件也可以挪到config.php同级目录下,效果也一样。
##### 2.4 场景配置
######什么叫场景配置?
- 为了满足在不同的办公场景下连接不同的配置,所以场景配置华丽登场。比如说:在家办公要连接的是一个在家的数据库,账户和密码,在办公室办公要连接的是一个在办公室连接的账户和密码。那有人会说,道理我懂,那如何配置呢?好的,那么下面我们就以上面打比方根据不同办公场景连接不同的数据库,来实操一遍:
- 1、在config.php文件中需要配置选项如下:
- 2、在config.php同级目录下创建home.php文件,这个文件名就是上面config.php中配置相对应的文件名。
- 3、配置完毕后,如何查看我们刚做的场景配置是否生效了呢?在控制器中代码如下:
- 4、在浏览器输出如下:
由此可见,我们场景配置生效了,替代了database.php扩展配置里的数据库配置,那么其他更多场景配置照样可以这么操作。
##### 2.5 模块配置
######什么叫模块配置?
- 顾名思义就是这里的配置只对这个模块生效。比如说在前端index模块配置项只能在index模块里有效,在admin模块里就调用不到也无法对admin有效。如下操作:
- 1、在应用目录app同级目录的config目录下创建index文件夹config.php(文件名称是固定的哈)
- 2、测试配置已经做好,如何测试模块配置中添加的配置生效与否。在index/index/index和admin/index/index下分别是否可以获取刚才的配置值
- 3、通过浏览器输出结果如下
- 综上证明:
1、模块配置只对配置的模块有效
2、开发过程中,各个模块的差异配置就可以上面这么操作。
##### 2.6 动态配置
######2.6.1 什么叫动态配置?
- 1、用助手函数config写在构造函数里的配置,对整个控制器有效;
- 2、用助手函数config写在普通函数里的配置,只对当前函数有效。
######2.6.2 我们来看下如何使用:
- 1、在index模块Index类创建代码如下:
- 2、浏览输出如下:
- 综上证明:
1、我们的概念是对的,那么以后开发过程中需要做动态配置就可以如上面操作即可。
2、通过助手函数config取值和设置值,通过 \think\Config::get 和 \think\Config::set() 也是可以达到目的的。
##### 2.7 环境配置
######2.7.1 什么叫环境配置?
- 在开发过程中,可以在项目的根目录下创建.env文件配置环境变量,环境配置的配置可以覆盖应用配置里同名的配置。
- 1、在项目根目录下面创建.env文件,配置参数定义格式采用ini方式
- 2、读取环境配置里的变量,操作代码如下所示,get第二个参数是指不存在时给的默认值
- 3、浏览器输出如下:
- 综上证明:
1、环境配置覆盖应用场景下同名的配置
2、环境配置第一个参数存在时输出,如果不存在则输出第二个参数的默认值
## 3.单入口文件:
- 应用程序的所有http请求都由某一个文件接收并由这个文件判断需要加载哪个控制器的代码。单入口其实http访问的永远只是index.php这个文件,只不过跟着加载的文件内容不同而已,要去加载哪些内容,根据index.php后面跟着的参数来判断。
- 但是单入口并不是说只能有一个入口,比如说,给app写第三方接口,但是我们并不希望第三方知道我们太多的内容,这个时候就需要在index.php同级目录下再创建一个入口文件,比如说api.php,然后在入口文件限定从此入口文件只能访问某模块或某模块下的某方法。
## 4.控制器
######4.1 什么是控制器?
- mvc中的c,在c中实现业务逻辑的完成,获取v传递过来的值域,根据这些值域,去m处获取需要的结果,起到沟通的桥梁作用。
- 在ThinkPHP5框架中,每个控制器都可以单独实现各种功能,可以无需继承think\Controller的类,只不过如果我们继承了think\Controller类,我们可以直接使用think\Contrller封装好的成员方法直接拿来使用。所以在开发过程中,我们一般直接继承。
- 在think\Controller类中有三个方法直接供我们使用,view、fetch、display。view方法第三个参数容易时文件本身有的配置失效,所以一般不推荐使用view。一般网站的开发,前端有页面展示的这种,我们推荐使用fetch方法。一般在接口的开发,需要有一个页面展示输出的变量,这个时候可以用display方法。下面我们用实例展示下。
- 1、view方法,可以不需要继承think\Controller类
①、控制器代码如下:
②、模板中代码如下:
③、运行结果如下:
- 2、fetch方法,必须继承think\Controlller类
①、控制器代码如下:
②、模板代码同view模板一样,也能够得到一样的效果,只是变量赋值给模板的方式不同而已。
- 3、display方法,记住了,这里的display方法和thinkphp3版本display方法一毛钱关系都没有。
①、控制器代码如下:
②可以不需要有模板存在不会有报错照样有输出。
有人会问:我们把上面三种方法都测试了,确实可以用哦,但是在display方法时只能返回的一个字符串,又说用这个来写接口,那么我有一个疑问,如果我需要返回的是一个数组那怎么办呢?
答:这个问题问的好,返回是一个数组,那么我们只需用函数json_encode转换成json字符串,然后再display,接口接收后再转换成数组即可。
##5、路由
#####5.1 什么是路由?
- 就是访问某个页面在浏览器地址栏输入的url地址。在ThinkPHP5版本可以实现自由定义。这么自由定义路由好处非常多,一方面原先要写的很长的url地址,现在可以写的很简单;另一方面让这个url地址无规律可寻,增加了我们网站的安全性。
- 我们了解了概念,那如何使用呢?下面我们配置一个自由配置路由,同时呢没有配置的可以按原先的路由正常访问。操作如下:
- 1、在app同级文件夹config下的config.php下配置选项
- 2、在config.php同级中创建文件route.php文件,配置如下:
- 3、其配置的控制器代码如下
- 4、浏览器输出如下:
- 综上证明:
1、在没有配置之前需要通过:think.com/index/index/index/id/6才能访问的,现在只需要输入:think.com/detail/6就可以访问了
2、如果现在有配路由的,对应未配之前的路由就失效了。
##6、常用的模板标签
#####6.1 什么是叫模板标签?
- 当变量赋值给模板时,需要在模板输出,如果采用原生的php代码输出变量的话,那么前端攻城狮也要去懂php代码。如果使用模板引擎技术,那么只需要稍微懂得各个标签是如何使用即可输出变量,而且这种标签也跟前端的标签很相似,对于前端攻城狮易掌握。
其实现原理如下图所示:
#####6.2 常用的模板标签。
1、控制器代码如下:
2、模板代码如下:
3、浏览器输出如下:
还有更多模板的标签可以查看手册,按照上面例子的方式测试其用法。
##8、课堂总结
- 1、学会应用框架配置
- 2、熟悉入口文件延伸
- 3、能够熟练应用控制器
- 4、配置路由
- 5、掌握模板标签
##9、课后练习
- 1、练习没有涉及到的模板标签,比如循环的另外两种标签、switch、if、neq、range等标签
- 2、练习控制器继承think\Controller后的各种方法使用
- 3、对课堂知识做好属于自己的笔记
领取专属 10元无门槛券
私享最新 技术干货