thinkPHP中配置的读取与C方法详解


Posted in PHP onDecember 05, 2016

本文实例讲述了thinkPHP中配置的读取与C方法。分享给大家供大家参考,具体如下:

1.项目公共配置

Conf/config.php

内容如下

<?php
/**
 *项目公共配置
 *@package
 *@author
 **/
return array(
 'LOAD_EXT_CONFIG'   => 'db,info,email,safe,upfile,cache,route,app,alipay,sms,platform,store,pay',  
 'APP_AUTOLOAD_PATH'  => '@.ORG',
 'OUTPUT_ENCODE'   => true,    //页面压缩输出
 'PAGE_NUM'    => 15,
 /*Cookie配置*/
 'COOKIE_PATH'   => '/',    // Cookie路径
 'COOKIE_PREFIX'   => '',    // Cookie前缀 避免冲突
 /*定义模版标签*/
 'TMPL_L_DELIM'   =>'{sh:',   //模板引擎普通标签开始标记
 'TMPL_R_DELIM'   =>'}',    //模板引擎普通标签结束标记
 'TMPL_CACHE_ON'   => false,   //关闭模板缓存
 'DEFAULT_GROUP'   => 'Home',   //默认访问分组,设置默认入口
 'APP_GROUP_LIST'  => 'Agent,Home,System,User,Store,Wap,Mall,Opener',  // 项目分组设定,多个组之间用逗号分隔,例如'Home,Admin'
 'PUBLIC_RESOURSE'  => './Public/',
 'URL_404_REDIRECT'  => './Tpl/404.html',
);
?>

'LOAD_EXT_CONFIG' => 'db,info,email,safe,upfile,cache,route,app,alipay,sms,platform,store,pay' 确定加载的额外的配置,这些配置都可以通过C()方法读取,全局有效。

2.如果启用了模块分组,则可以在对每个分组单独定义配置文件,分组配置文件位于:

项目配置目录/分组名称/config.php

'APP_GROUP_LIST' => 'Home,Admin', //项目分组设定
'DEFAULT_GROUP' => 'Home', //默认分组

现在定义了Home和Admin两个分组,则我们可以定义分组配置文件如下:

Conf/Home/config.php
Conf/Admin/config.php

每个分组的配置文件仅在当前分组有效,分组配置的定义格式和项目配置是一样的。

注意:分组名称区分大小写,必须和定义的分组名一致。

3.读取配置

定义了配置文件之后,可以使用系统提供的C方法(如果觉得比较奇怪的话,可以借助Config单词来帮助记忆)来读取已有的配置

C('参数名称')//获取已经设置的参数值

例如,C('APP_STATUS') 可以读取到系统的调试模式的设置值,同样,由于配置参数不区分大小写,因此C('app_status')是等效的,但是建议使用大写方式的规范。

如果APP_STATUS尚未存在设置,则返回NULL。

C方法同样可以用于读取二维配置

C('USER_CONFIG.USER_TYPE')//获取用户配置中的用户类型设置

C方法读取全局配置,以及当前模块的配置。

参数没有的话,将读取全部的有效配置。

如果存在相同的配置名,前面的值将被覆盖。

例如:

'HTML_CACHE_TIME' => 60, //静态缓存有效期(秒)
'HTML_CACHE_TIME' => 80,

最终获取的是80。

加载顺序依照参数LOAD_EXT_CONFIG

'LOAD_EXT_CONFIG' => 'db,info,email,safe,upfile,cache,route,app,alipay,sms,platform,store,pay'

比如info中有个参数HTML_CACHE_TIME 为60 ,其余配置中没有,那么这个参数读取出来就是60。

如果db中也有HTML_CACHE_TIME为50,那么值还是60。因为info是后读取的,把db中的HTML_CACHE_TIME覆盖掉了。

附上C方法源码

/**
 * 获取和设置配置参数 支持批量定义
 * @param string|array $name 配置变量
 * @param mixed $value 配置值
 * @return mixed
 */
function C($name=null, $value=null) {
 static $_config = array();
 // 无参数时获取所有
 if (empty($name)) {
  if(!empty($value) && $array = cache('c_'.$value)) {
   $_config = array_merge($_config, array_change_key_case($array));
  }
  return $_config;
 }
 // 优先执行设置获取或赋值
 if (is_string($name)) {
  if (!strpos($name, '.')) {
   $name = strtolower($name);
   if (is_null($value))
    return isset($_config[$name]) ? $_config[$name] : null;
   $_config[$name] = $value;
   return;
  }
  // 二维数组设置和获取支持
  $name = explode('.', $name);
  $name[0] = strtolower($name[0]);
  if (is_null($value))
   return isset($_config[$name[0]][$name[1]]) ? $_config[$name[0]][$name[1]] : null;
  $_config[$name[0]][$name[1]] = $value;
  return;
 }
 // 批量设置
 if (is_array($name)){
  $_config = array_merge($_config, array_change_key_case($name));
  if(!empty($value)) {// 保存配置值
   cache('c_'.$value,$_config);
  }
  return;
 }
 return null; // 避免非法参数
}

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP5在Apache下的两种模式的安装
Sep 05 PHP
PHP持久连接mysql_pconnect()函数使用介绍
Feb 05 PHP
PHP中__get()和__set()的用法实例详解
Jun 04 PHP
php IP转换整形(ip2long)的详解
Jun 06 PHP
destoon之一键登录设置
Jun 21 PHP
ThinkPHP模板范围判断输出In标签与Range标签用法详解
Jun 30 PHP
PHP图片库imagemagick安装方法
Sep 23 PHP
Symfony生成二维码的方法
Feb 04 PHP
Linux环境下php实现给网站截图的方法
May 03 PHP
详谈PHP中public,private,protected,abstract等关键字的用法
Dec 31 PHP
Yii框架的路由配置方法分析
Sep 09 PHP
在laravel-admin中列表中禁止某行编辑、删除的方法
Oct 03 PHP
PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
Dec 05 #PHP
thinkPHP js文件中U方法不被解析问题的解决方法
Dec 05 #PHP
thinkPHP中验证码的简单实现方法
Dec 05 #PHP
php获取当前月与上个月月初及月末时间戳的方法
Dec 05 #PHP
简述php环境搭建与配置
Dec 05 #PHP
php 变量引用与变量销毁机制详细介绍
Dec 05 #PHP
[原创]php实现 data url的图片生成与保存
Dec 04 #PHP
You might like
PHP获取redis里不存在的6位随机数应用示例【设置24小时过时】
2017/06/07 PHP
对php 判断http还是https,以及获得当前url的方法详解
2019/01/15 PHP
ExtJs grid行 右键菜单的两种方法
2010/06/19 Javascript
jquery移除button的inline onclick事件(已测试及兼容浏览器)
2013/01/25 Javascript
js数组操作常用方法
2014/05/08 Javascript
JavaScript模拟实现键盘打字效果
2015/06/29 Javascript
jquery实现鼠标点击后展开列表内容的导航栏效果
2015/09/14 Javascript
AngularJS入门教程之ng-checked 指令详解
2016/08/01 Javascript
JavaScript实战之带收放动画效果的导航菜单
2016/08/16 Javascript
正则表达式,替换所有HTML标签的简单实例
2016/11/28 Javascript
Node.js开发第三方微信公众平台
2017/06/05 Javascript
javascript 跨域问题以及解决办法
2017/07/17 Javascript
详解node.js 下载图片的 2 种方式
2018/03/02 Javascript
Vue.set() this.$set()引发的视图更新思考及注意事项
2018/08/30 Javascript
详解IOS微信上Vue单页面应用JSSDK签名失败解决方案
2018/11/14 Javascript
对layui中table组件工具栏的使用详解
2019/09/19 Javascript
Node.js 深度调试方法解析
2020/07/28 Javascript
在vue中使用eslint,配合vscode的操作
2020/11/09 Javascript
[01:18:45]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第三场2月1日
2021/03/11 DOTA
Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法
2015/03/05 Python
Python简单定义与使用字典dict的方法示例
2017/07/25 Python
python中import与from方法总结(推荐)
2019/03/21 Python
Python Web框架之Django框架文件上传功能详解
2019/08/16 Python
python实现证件照换底功能
2019/08/20 Python
通过 Python 和 OpenCV 实现目标数量监控
2020/01/05 Python
导入tensorflow:ImportError: libcublas.so.9.0 报错
2020/01/06 Python
Python利用逻辑回归模型解决MNIST手写数字识别问题详解
2020/01/14 Python
python利用datetime模块计算程序运行时间问题
2020/02/20 Python
Python栈的实现方法示例【列表、单链表】
2020/02/22 Python
Python处理PDF与CDF实例
2020/02/26 Python
什么是Deployment descriptors;都有什么类型的部署描述符
2015/07/28 面试题
应届大专毕业生个人自荐信
2013/09/22 职场文书
农林经济管理专业自荐信
2014/09/01 职场文书
2015年保洁工作总结范文
2015/04/28 职场文书
python爬虫之爬取笔趣阁小说
2021/04/22 Python
Python实现排序方法常见的四种
2021/07/15 Python