ThinkPHP5 ---基础篇(配置)

ThinkPHP5 ---基础篇(配置)

一、惯例配置

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

|

//定义配置文件目录

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

|

image.png

ii. 在application同级新建目录conf

image.png

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

image.png

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

image.png
image.png

二、应用配置

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

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

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

image.png

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

image.png

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

image.png

说明 配置生效

iv. 原理: array_merge()

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

同理:惯例配置(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)
image.png
  1. 打印配置
image.png
  1. 特例 database (数据库的配置)

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

image.png

b) 打印 配置生效

image.png

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

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

新建配置文件 conf/database.php

image.png

打印 配置生效

image.png

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

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

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

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

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

类似于就近原则

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

四、场景配置

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

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

  1. 应用配置文件 conf/config.php 配置’app_status’=> ‘’
image.png
  1. 在conf/下 新增场景配置文件 a.php ,b.php ,c.php
image.png
image.png
image.png
  1. 应用配置文件 conf/config.php 中 ‘app_status’=>’’ 指向a|b|c 就调用哪个场景的配置

A:

image.png
image.png

B:

image.png
image.png

C:

image.png
image.png
  1. 总结 : 需要场景配置的时候

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

image.png

五、模块配置

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

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

  1. 背景: 当前有两个模块 admin | home
image.png
  1. 在conf下新建两个目录 admin|home (对应两个模块 ) 目录下分别新建config.php(此文件名 算是规定的)
image.png
image.png
image.png
  1. 分别打印出 admin|home 模块下的配置
image.png
image.png

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

六、动态配置

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

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

分别访问index|delete方法

image.png
image.png
  1. 在方法中的配置 ---仅对当前方法有效
image.png

分别访问index|delete方法

image.png
image.png

七、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类

image.png

iv. Config类 Config::get()

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

参数为空 获取所有配置

对应的助手函数是 config()

a) use think\Config ;

image.png

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

image.png

v. 助手函数 thinkphp/helper.php

a) config()

image.png

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

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

image.png

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

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

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

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

i. dump($_ENV) ; 需要php.ini中 variables_order = "EGPCS"

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

image.png

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

image.png
image.png

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

image.png
image.png

v. 分组配置

image.png
image.png
image.png

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

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

  2. conf/config.php

image.png
  1. conf/dev.php 根据不同的场景 新建test.php |pro.php
image.png
  1. 根据.env文件的配置 切换场景...

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

a) .env

image.png

b) conf/database.php

image.png

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

FAQ:

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

1.找到被占端口pid

netstat -aon|findstr "3306"

image.png

2.根据pid 查看进程

tasklist|findstr "1880"

image.png

3.结束进程

taskkill /f /t /im mysqld.exe

image.png

二、自定义common模块报错:

image.png

报错信息:

image.png

分析:

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

解决:

image.png
image.png

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

三、修改application目录

i. 将application目录重命名 app

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

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,599评论 18 139
  • 常用配置指令说明 1. ServerRoot:服务器的基础目录,一般来说它将包含conf/和logs/子目录,其它...
    小僧有礼了阅读 4,484评论 0 5
  • ThinkPHP5 ---基础篇(安装) 一、ThinkPHP简介 i. ThinkPHP是一个免费开源 快速简单...
    donglingjiu阅读 2,751评论 0 1
  • 配置文件Config Config文件包含:2个属性,7个方法。其中2个属性为私有静态属性,外部不可访问。7个方法...
    PlusNie阅读 8,506评论 0 1
  • 真人,圣人,闲人,都是长寿之人,无论怎样,开心就好。 春夏秋冬四季循环,其特性: 春,生。(发陈)生发的季节,忌怒...
    天行武道养生阁阅读 506评论 1 7