ThinkPHP5 ---基础篇(配置)

ThinkPHP5 ---基础篇(配置)

一、惯例配置

i. 定义配置文件 public/index.php

//定义配置文件目录

define('CONF_PATH', __DIR__ . '/../conf/') ;

 

ii. application同级新建目录conf

 

iii. 打印当前配置   dump(config()) ;

 

iv. 上述打印出来的内容 即为thinkphp/convention.php 的内容

 


 

二、应用配置

i. 上述惯例配置是thinkphp框架提供的  应用于整个框架的默认配置 一般开发过程中 对惯例配置不做修改 防止后期的更新 维护 框架升级受到影响

ii. 应用配置只对整个应用有效 当前应用下的所有模块

iii. application同级新建 conf/config.php  

 

config.php定义之前打印的配置信息:

 

config.php定义之后打印的配置信息:

 

说明  配置生效

iv. 原理: array_merge()

1. index函数中打印出array_merge后的结果

 


 

同理:惯例配置(thinkphp/convention.php)相当于 $arr1  

应用配置(conf/config.php)相当于$arr2  

Thinkphp对于多维数组  分区域的merge操作 相同的key 后面的值将之前的替换(覆盖)

三、扩展配置

i. 上述 可以通过应用配置 改变默认配置  通过应配配置 可以满足完成开发的需求

ii. 扩展配置:实际项目开发中 配置项很多 缓存配置  session配置 cookie配置 若集中在一个文件中配置 文件过大 不易维护  拆分成多个文件以便于维护

iii. conf目录下新建extra目录   (conf/extra)  新建配置文件测试

1.   新建文件email.php   (conf/extra/email.php)

 

2. 打印配置

 

3. 特例 database (数据库的配置)

a) 正常思路:   conf/extra/database.php

 

b) 打印 配置生效

 

但是:实际开发中 如果项目不是特别大  或者说配置项不是特别多 多数使用默认配置  就不需要建立扩展配置  

几乎所有的项目都需要连接数据库操作 thinkphp允许我们将 database.php放在conf目录下

新建配置文件 conf/database.php

 

打印 配置生效

 

c) 此处 出现一个配置生效优先级的问题  

惯例配置thinkphp/convention.php  有数据库的配置信息

应用配置 conf/config.php    有数据库的配置信息

扩展配置中 database.php  也有数据库的配置信息  

经过多次merge操作  相同的key 应用配置中的值覆盖 惯例配置 扩展配置覆盖 应用配置  

类似于就近原则  

优先级(->) 扩展配置>应用配置>惯例(默认)配置  

四、场景配置

i. 实际开发中 有很多场景 开发环境 测试环境  ()生产环境  办公室环境 家里的环境....

ii.  有三个场景 A ,B ,C  以数据库配置为例  (不同场景开发 切换到不同场景的配置)

1. 应用配置文件 conf/config.php  配置’app_status’ => ‘’

 

2. conf/下  新增场景配置文件 a.php  ,b.php  ,c.php

 


 

3. 应用配置文件 conf/config.php 中  ‘app_status’=>’’ 指向a|b|c 就调用哪个场景的配置

A:

 

B:

 


 

C:

 


 

4. 总结 需要场景配置的时候  

a) 应用配置文件中 conf/config.php    ‘app_status’=>

b) 新建场景配置文件 conf/a.php   ...

<?php

return [

'app_address' => 'a' ,

'database' => [

 // 数据库类型

                'type'            => 'oracle',

                // 数据库连接DSN配置

                'dsn'             => '',

                'port'            => '1521' ,

                // 服务器地址

                'hostname'        => '127.0.0.1',

                // 数据库名

                'database'        => 'testA',

                // 数据库用户名

                'username'        => 'oracle',

                // 数据库密码

                'password'        => 'oracle',

                // 数据库连接端口

                'hostport'        => '',

...

c) 需要切换场景的时候  直接 应用配置文件

conf/config.php  ‘app_status’=> 指向所需要的场景

注意:数据库的配置项 需要配置所有的  即推荐把 thinkphp/convention.php文件中 database=>所有内容全都拷贝过来 配置  貌似是个bug

 

五、模块配置

i. 之前上述配置 都属于引应用级别(所有模块都有效)

ii. 模块配置: 实现仅对当前模块配置有效

1. 背景: 当前有两个模块  admin | home

 

2. conf下新建两个目录   admin|home  (对应两个模块 ) 目录下分别新建config.php(此文件名 算是规定的)

 

3. 分别打印出 admin|home 模块下的配置

 


 

配置生效 仅对当前模块有效 模块之间互不影响   extra扩展配置 同理

六、动态配置

i. 主要用于对当前控制器或者是某个方法 动态的配置设置

1. 当前控制器的配置   __construct() 构造函数中配置 ---对整个控制器有效

 

分别访问index|delete方法

 

2. 在方法中的配置  ---仅对当前方法有效

 

分别访问index|delete方法

 


 

七、Config类和config助手函数

i. Config类和config()作用: 对配置(惯例配置thinkphp/convention.php  应用配置conf/config.php以及扩展配置)的操作【has查询是否配置 set设置 get获取值等等】

ii. Config类在使用的时候 优先定义命名空间 use think\Config; 或者是带命名空间操作\think\Config::has(‘’)

config()可以直接使用

iii. Config

 

iv. ConfigConfig::get()   

1.  get() 可传参数string 参数名 ,string 作用域

参数为空  获取所有配置  

对应的助手函数是 config()

a) use think\Config ;

 

b) $res = \think\Config::get() ;

 

v. 助手函数 thinkphp/helper.php

a) config()

 

b) 开发中 推荐使用Config类 来更改配置信息  如果在入口文件或者引入helper.php之前 定义过config()函数  那么就不能再通过config()获取的信息会有问题

c) 设置参数 Config::set()  ---config(‘’,’’,’’)

 

d) Config::has(‘’) --- 判断是否配置 【参数不存在或者null都返回false

i.  Config::has(‘username’)  判断username是否存在

ii. 对应助手函数 config(‘?username’)

八、环境变量的配置和使用

i. dump($_ENV) ;   需要php.inivariables_order = "EGPCS"

ii. Thinkphp5中   在application同级 新建文件 .env

 

iii. use think\Env ;   Env::get(‘’)   

 


 

iv. Env::get(‘pass’,’default’) 若是pass有值 则返回值 若没配置返回第二个参数default

 


 

v. 分组配置

 


 

  

vi.  配置场景(开发环境 生产环境...)

1. .env文件  ststus=devdev(开发环境)|test(测试环境)|pro(生产环境)

2. conf/config.php

 

3. conf/dev.php    根据不同的场景  新建test.php |pro.php

 

4. 根据.env文件的配置 切换场景...

5. 若是 .env中  配置了数据库的信息   database

a) .env

 

b) conf/database.php

 

vii. 总结: 各个环境配置不同的.env 文件   切换环境的时候 只需要切换不同的.env文件即可


FAQ

一、启动本地环境 查看端口占用

1.找到被占端口pid

netstat -aon|findstr "3306"

 

2.根据pid 查看进程

tasklist|findstr "1880"

 

 

3.结束进程

taskkill /f /t /im mysqld.exe

 

 

 

二、自定义common模块报错:

 

报错信息:

 

分析:

这是thinkphp的规定 默认common是公用模块 存放 通用方法 不允许在URL上直接访问

解决:

 


 

将重复性的代码  权限 数据处理放在common模块  简化程序

 

 

三、修改application目录

i. application目录重命名 app

ii. 修改public/index.php    define(‘APP_PATH’ , __DIR__ . ‘/../app/’);

 

猜你喜欢

转载自blog.csdn.net/donglingjiu/article/details/80672181