thinkphp学习

配置设置

优先级:动态配置>模块配置>扩展配置>应用配置>惯例配置
知识拓展以下仅供了解:
1惯例配置的作用域是全局,作用域越大,优先级越低;
2场景配置是用来切换开发场景的
3模块配置里也可细分扩展配置,很少用到,除非项目很庞大

模块设计

模块设计

localhost/index/index/index报错

把. htaccess中 RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]

改成RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]

在其他目录使用common下的类

use app\common\controller\类名(index) as xxx;

之后2种

  1. class xx extends xxx return $this-> 方法名

  2. $xx=new xxx return $xx->方法名

惯例配置

thinkphp\convention.php

应用配置

扩展配置

config 中 改变 框架配置

  1. config.php 用来改变个别配置
  2. 新建extra目录 在其中放入 一类配置 如email,database 之后在这个配置文件中修改
  3. 拉出来的配置文件级别高与config.php 会进行 array merge

场景配置

修改app_status的值

设置"app_status" => "value",会指向value.php,所以能联系上home.php 和 office.php

value.php 要在config.php的同级目录下

模块配置

config目录下 新建与 配置模块 相同名字的 文件夹
之后便可在该文件夹中 进行 扩展配置&场景配置一类操作

动态配置

主要用于对当前控制器或某个方法里面进行动态的配置改变或动态的配置设置

  1. function __construct(){} 其中—construct类 会在同一文件中 其它方法之前运行 该代码段中不能用Config::get。

  2. 在方法中进行动态配置

    该动态配置只在该方法中生效

​ 1.config(name:' * ',value:' * ')

​ 2.Config::set

config类和助手函数config

Config 地址 thinkphp/library/think/Config.php

config 地址 thinkphp/helper.php

仔细观察 有些方法中 的值未赋 用 ' ' 跳过赋下一个值

// 导入my_config.php中的配置参数,并纳入user作用域
Config::load('my_config.php','','user'); 

// 解析并导入my_config.ini 中的配置参数,读入test作用域
Config::parse('my_config.ini','ini','test'); 

// 设置user_type参数,并纳入user作用域
Config::set('user_type',1,'user'); 

// 批量设置配置参数,并纳入test作用域
Config::set($config,'test'); 

// 读取user作用域的user_type配置参数
echo Config::get('user_type','user');

// 读取user作用域下面的所有配置参数
dump(Config::get('','user')); 
dump(config('',null,'user')); // 同上

// 判断在test作用域下面是否存在user_type参数
Config::has('user_type','test'); 
config('?user_type','test');

config()的实质是 先调用Config::xxx 再运行

config('?name','range')-->

return 0 === strpos($name, '?') ? Config::has(substr($name, 1), $range) : Config::get($name, $range);

strpos ( string $haystack , mixed $needle):返回needle在haystack中首次出现的数字位置 注意字符串位置是从0开始,而不是从1开始的。如果没找到 needle,将返回 FALSE

环境变量配置和使用


问题1:$_ENV无法获取 环境变量

打开php.ini,找到这样几行代码:
; variables_order
;Default Value: "EGPCS"
; Development Value: "GPCS"
; Production Value: "GPCS"
然后,将;Default Value: "EGPCS"前面的分号去掉,整个配置变成:
; variables_order
Default Value: "EGPCS"
; Development Value: "GPCS"
; Production Value: "GPCS"
然后重启Apache就可以了。


问题2:.env无法使用

修改thinkphp框架下的 base.php
在 putenv("$name=$val"); 代码下边
加上
$_ENV[$name] = $val;
$_SERVER[$name] = $val;


环境变量配置的参数会全部转换为大写,值为 nullnofalse 等效于 "",值为 yestrue 等效于 "1"

分组配置

[database]              |等价
hostname=localhost      |database_hostname=localhost  username=root           |database_username=root 
password=root           |database_password=root 

获取环境变量的值

Env::get('database.username');
Env::get('database.password');
// 同时下面的方式也可以获取
Env::get('database_username');
Env::get('database_password');

// 获取环境变量 如果不存在则使用默认值root
Env::get('database.username','root');

可以直接在应用配置中使用环境变量,例如:

return [
    'hostname'  =>  Env::get('hostname','127.0.0.1'),
];

可在.env中创建app_status 表示开发环境 并中config目录下 建相应开发环境的 PHP文件 并编写

从而使用不同的环境变量

 posted on 2021-01-25 17:23  夜深楼鼓  阅读(80)  评论(0编辑  收藏  举报