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 相关文章推荐
人大复印资料处理程序_输入篇
Oct 09 PHP
php中将数组转成字符串并保存到数据库中的函数代码
Sep 29 PHP
php ctype函数中文翻译和示例
Mar 21 PHP
Windows下的PHP安装pear教程
Oct 24 PHP
PHP实现的json类实例
Jul 28 PHP
php字符串操作针对负值的判断分析
Jul 28 PHP
基于jQueryUI和Corethink实现百度的搜索提示功能
Nov 09 PHP
php实现留言板功能(代码详解)
Mar 28 PHP
php压缩文件夹最新版
Jul 18 PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
Apr 16 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
Aug 13 PHP
TP3.2.3框架文件上传操作实例详解
Jan 23 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
使用adodb lite解决问题
2006/12/31 PHP
第4章 数据处理-php数组的处理-郑阿奇
2011/07/04 PHP
php使用PDO从数据库表中读取数据的实现方法(必看)
2017/06/02 PHP
PHP tp5中使用原生sql查询代码实例
2020/10/28 PHP
jQuery 技巧大全(新手入门篇)
2009/05/12 Javascript
学习ExtJS Panel常用方法
2009/10/07 Javascript
JQuery入门基础小实例(1)
2015/09/17 Javascript
浅谈如何实现easyui的datebox格式化
2016/06/12 Javascript
微信小程序开发经验总结(推荐)
2017/01/11 Javascript
详解基于vue-router的动态权限控制实现方案
2017/09/28 Javascript
微信小程序实现签到功能
2018/10/31 Javascript
vue的滚动条插件实现代码
2019/09/07 Javascript
[01:41]DOTA2超级联赛专访YYF 称一辈子难忘TI2
2013/05/28 DOTA
python访问纯真IP数据库的代码
2011/05/19 Python
Python实现树莓派WiFi断线自动重连的实例代码
2017/03/16 Python
使用pandas中的DataFrame数据绘制柱状图的方法
2018/04/10 Python
pycharm重置设置,恢复默认设置的方法
2018/10/22 Python
python贪吃蛇游戏代码
2020/04/18 Python
详解python百行有效代码实现汉诺塔小游戏(简约版)
2020/10/30 Python
python调用win32接口进行截图的示例
2020/11/11 Python
Html5 webview元素定位工具的实现
2020/08/07 HTML / CSS
英国轻奢珠宝品牌:Astley Clarke
2016/12/18 全球购物
从当地商店送来的杂货:Instacart
2018/08/19 全球购物
怎么写有吸引力的自荐信
2013/11/17 职场文书
《学会待客》教学反思
2014/02/22 职场文书
人事经理岗位职责范本
2014/08/04 职场文书
售房委托书
2014/08/30 职场文书
党员学习中共十八大思想报告
2014/09/12 职场文书
党员干部反四风对照检查材料思想汇报
2014/09/14 职场文书
乱丢垃圾袋检讨书
2014/10/08 职场文书
2015年护士长个人工作总结
2015/04/24 职场文书
公司酒会主持词
2015/07/02 职场文书
2016年大学生暑期社会实践活动总结
2016/04/06 职场文书
nginx负载功能+nfs服务器功能解析
2022/02/28 Servers
golang操作rocketmq的示例代码
2022/04/06 Golang
Python pyecharts案例超市4年数据可视化分析
2022/08/14 Python