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 相关文章推荐
转PHP手册及PHP编程标准
Dec 17 PHP
php unset全局变量运用问题的深入解析
Jun 17 PHP
基于PHP magic_quotes_gpc的使用方法详解
Jun 24 PHP
PHP中常用的字符串格式化函数总结
Nov 19 PHP
PHP如何实现Unicode和Utf-8编码相互转换
Jul 29 PHP
摘自织梦CMS中的图片处理类
Aug 08 PHP
ThinkPHP的常用配置选项汇总
Mar 24 PHP
PHP在线调试执行的实现方法(附demo源码)
Apr 28 PHP
php批量删除操作(数据访问)
May 23 PHP
PHP实现图片压缩
Sep 09 PHP
PHP结合Ffmpeg快速搭建流媒体服务的实践记录
Oct 31 PHP
php传值和传引用的区别点总结
Nov 19 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中常用编辑器推荐
2007/01/02 PHP
浅析php工厂模式
2014/11/25 PHP
PHP设计模式之策略模式原理与用法实例分析
2019/04/04 PHP
js类后台管理菜单类-MenuSwitch
2007/09/12 Javascript
javascript 有用的脚本函数
2009/05/07 Javascript
javascript实现网站加入收藏功能
2015/12/16 Javascript
JS面向对象编程详解
2016/03/06 Javascript
基于jQuery实现页面搜索功能
2020/03/26 Javascript
微信JSAPI支付操作需要注意的细节
2017/01/10 Javascript
原生js实现下拉框功能(支持键盘事件)
2017/01/13 Javascript
webpack实现热加载自动刷新的方法
2017/07/30 Javascript
Vue 2.0学习笔记之Vue中的computed属性
2017/10/16 Javascript
微信小程序实现弹出层效果
2020/05/26 Javascript
layui-select动态选中值的例子
2019/09/23 Javascript
JS 获取文件后缀,判断文件类型(比如是否为图片格式)
2020/05/09 Javascript
JavaScript语句错误throw、try及catch实例解析
2020/08/18 Javascript
vue自定义组件实现双向绑定
2021/01/13 Vue.js
使用python实现strcmp函数功能示例
2014/03/25 Python
python中django框架通过正则搜索页面上email地址的方法
2015/03/21 Python
Python NumPy库安装使用笔记
2015/05/18 Python
Python脚本文件打包成可执行文件的方法
2015/06/02 Python
python使用clear方法清除字典内全部数据实例
2015/07/11 Python
windows下cx_Freeze生成Python可执行程序的详细步骤
2018/10/09 Python
对python中数组的del,remove,pop区别详解
2018/11/07 Python
python下载的库包存放路径
2020/07/27 Python
美国电子元器件分销商:Newark element14
2018/01/13 全球购物
美国购买新书和二手书网站:Better World Books
2018/10/31 全球购物
行政执法队伍作风整顿剖析材料
2014/10/11 职场文书
师范生见习报告
2014/10/31 职场文书
劳模先进事迹材料
2014/12/24 职场文书
培养联系人考察意见
2015/06/01 职场文书
就业指导讲座心得体会
2016/01/15 职场文书
学生早退检讨书(范文)
2019/08/19 职场文书
创业计划书之家教中心
2019/09/25 职场文书
Python机器学习算法之决策树算法的实现与优缺点
2021/05/13 Python
SpringBoot连接MySQL获取数据写后端接口的操作方法
2021/11/02 MySQL