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 相关文章推荐
Get或Post提交值的非法数据处理
Oct 09 PHP
php 破解防盗链图片函数
Dec 09 PHP
MayFish PHP的MVC架构的开发框架
Aug 13 PHP
PHP中利用substr_replace将指定两位置之间的字符替换为*号
Jan 27 PHP
wamp下修改mysql访问密码的解决方法
May 07 PHP
PHP 使用MySQL管理Session的回调函数详解
Jun 21 PHP
php中autoload的用法总结
Nov 08 PHP
php分页示例分享
Apr 30 PHP
php实现比较两个文件夹异同的方法
Jun 18 PHP
PHP实现数组的笛卡尔积运算示例
Dec 15 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
Feb 10 PHP
laravel利用中间件做防非法登录和权限控制示例
Oct 21 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可应用于面包屑导航的递归寻找家谱树实现方法
2015/02/02 PHP
php基于PDO连接MSSQL示例DEMO
2016/07/13 PHP
使用phpQuery获取数组的实例
2017/03/13 PHP
PHP实现合并两个排序链表的方法
2018/01/19 PHP
javascript 操作文件 实现方法小结
2009/07/02 Javascript
给页面渲染时间加速 干掉Dom Level 0 Event
2012/12/19 Javascript
解析javascript 浏览器关闭事件
2013/07/08 Javascript
jqGrid读取选择的多行的某个属性代码
2014/05/18 Javascript
jQuery实现跨域
2015/02/03 Javascript
JS控制表格实现一条光线流动分割行的方法
2015/03/09 Javascript
在JavaScript中操作时间之getMonth()方法的使用
2015/06/10 Javascript
值得分享的Bootstrap Ace模板实现菜单和Tab页效果
2015/12/30 Javascript
JS中使用apply、bind实现为函数或者类传入动态个数的参数
2016/04/26 Javascript
JS复制对应id的内容到粘贴板(Ctrl+C效果)
2017/01/23 Javascript
Vuejs中使用markdown服务器端渲染的示例
2017/11/22 Javascript
理解Koa2中的async&amp;await的用法
2018/02/05 Javascript
vue实现模态框的通用写法推荐
2018/02/26 Javascript
详解webpack自定义loader初探
2018/08/29 Javascript
微信小程序解析富文本过程详解
2019/07/13 Javascript
详细教你微信公众号正文页SVG交互开发技巧
2019/07/25 Javascript
java直接调用python脚本的例子
2014/02/16 Python
Django静态资源URL STATIC_ROOT的配置方法
2014/11/08 Python
Python中文分词实现方法(安装pymmseg)
2016/06/14 Python
Python实现的微信公众号群发图片与文本消息功能实例详解
2017/06/30 Python
Python正则表达式知识汇总
2017/09/22 Python
django将图片上传数据库后在前端显式的方法
2018/05/25 Python
解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题
2020/04/27 Python
Django def clean()函数对表单中的数据进行验证操作
2020/07/09 Python
pycharm进入时每次都是insert模式的解决方式
2021/02/05 Python
Dyson戴森波兰官网:Dyson.pl
2019/08/05 全球购物
上课玩手机检讨书
2014/02/08 职场文书
2014年教育培训工作总结
2014/12/08 职场文书
校园广播站开场白
2015/06/01 职场文书
2016护理专业求职自荐书
2016/01/28 职场文书
MySQL sql_mode的使用详解
2021/05/08 MySQL
MySQL事务的隔离级别详情
2022/07/15 MySQL