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新手上路(十一)
Oct 09 PHP
php自定义函数之递归删除文件及目录
Aug 08 PHP
php检查字符串中是否包含7位GSM字符的方法
Mar 17 PHP
PHP常用处理静态操作类
Apr 03 PHP
PHP安装memcached扩展笔记
May 28 PHP
PHP面向对象程序设计OOP继承用法入门示例
Dec 27 PHP
PHP更安全的密码加密机制Bcrypt详解
Jun 18 PHP
php爬取天猫和淘宝商品数据
Feb 23 PHP
yii2中关于加密解密的那些事儿
Jun 12 PHP
thinkphp5框架扩展redis类方法示例
May 06 PHP
PHP Cli 模式设置进程名称的方法
Jun 12 PHP
php实现自动生成验证码的实例讲解
Nov 17 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实现计算百度地图坐标之间距离的方法
2016/05/05 PHP
Yii2针对游客、用户防范规则和限制的解决方法分析
2016/10/08 PHP
php中namespace及use用法分析
2016/12/06 PHP
PHP实现按之字形顺序打印二叉树的方法
2018/01/16 PHP
createElement动态创建HTML对象脚本代码
2008/11/24 Javascript
jQuery的链式调用浅析
2010/12/03 Javascript
Jquery实现图片左右自动滚动示例
2013/09/25 Javascript
javascript实现图片跟随鼠标移动效果的方法
2015/05/13 Javascript
js实现类似菜单风格的TAB选项卡效果代码
2015/08/28 Javascript
Javascript编程之继承实例汇总
2015/11/28 Javascript
基于jquery实现动态竖向柱状条特效
2016/02/12 Javascript
详解原生JavaScript实现jQuery中AJAX处理的方法
2016/05/10 Javascript
js制作网站首页图片轮播特效代码
2016/08/30 Javascript
浅谈JavaScript事件绑定的常用方法及其优缺点分析
2016/11/01 Javascript
关于Vue.nextTick()的正确使用方法浅析
2017/08/25 Javascript
强大的JavaScript响应式图表Chartist.js的使用
2017/09/13 Javascript
原生JS实现Ajax跨域请求flask响应内容
2017/10/24 Javascript
jQuery第一次运行页面默认触发点击事件的实例
2018/01/10 jQuery
vue动态改变背景图片demo分享
2018/09/13 Javascript
浅析Vue.js 中的条件渲染指令
2018/11/19 Javascript
vue ssr 实现方式(学习笔记)
2019/01/18 Javascript
解决JQuery的ajax函数执行失败alert函数弹框一闪而过问题
2019/04/10 jQuery
vue-cli的build的文件夹下没有dev-server.js文件配置mock数据的方法
2019/04/17 Javascript
element form 校验数组每一项实例代码
2019/10/10 Javascript
[44:47]Ti4 循环赛第三日 iG vs NaVi
2014/07/12 DOTA
python append、extend与insert的区别
2016/10/13 Python
详解python 发送邮件实例代码
2016/12/22 Python
简单了解python filter、map、reduce的区别
2020/01/14 Python
Python中logging日志的四个等级和使用
2020/11/17 Python
python实现简单猜单词游戏
2020/12/24 Python
巴西婴儿用品商店:Bebe Store
2017/11/23 全球购物
欧洲领先的技术商店:eibmarkt.com
2019/05/10 全球购物
幼儿园保教管理制度
2014/02/03 职场文书
幼儿园家长评语大全
2014/04/16 职场文书
奥巴马经典演讲稿
2014/09/13 职场文书
餐厅开业活动方案
2019/07/08 职场文书