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种
-
class xx extends xxx return $this-> 方法名
-
$xx=new xxx return $xx->方法名
惯例配置
thinkphp\convention.php
应用配置
扩展配置
config 中 改变 框架配置
- config.php 用来改变个别配置
- 新建extra目录 在其中放入 一类配置 如email,database 之后在这个配置文件中修改
- 拉出来的配置文件级别高与config.php 会进行 array merge
场景配置
修改app_status的值
设置"app_status" => "value",会指向value.php,所以能联系上home.php 和 office.php
value.php 要在config.php的同级目录下
模块配置
config目录下 新建与 配置模块 相同名字的 文件夹
之后便可在该文件夹中 进行 扩展配置&场景配置一类操作
动态配置
主要用于对当前控制器或某个方法里面进行动态的配置改变或动态的配置设置
-
function __construct(){} 其中—construct类 会在同一文件中 其它方法之前运行 该代码段中不能用Config::get。
-
在方法中进行动态配置
该动态配置只在该方法中生效
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;
环境变量配置的参数会全部转换为大写,值为 null
,no
和 false
等效于 ""
,值为 yes
和 true
等效于 "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文件 并编写
从而使用不同的环境变量