CI源码(一)—config配置文件

(一) 使用方式

(a) 系统级配置

语言、字符编码、session、cookie等配置项

  • 文件位置: application/config/config.php
  • 加载方式: 自动加载
  • 调用方式: $this->config->item(‘config_item_key‘);

(b) 业务级别配置

实际业务中用到的配置项,或者叫做常量,比如1<->男  2<->女  3<->未知等数据。强烈建议把业务级别的配置项与系统配置项分开。CI支持多级目录的配置文件加载,所以可以在application/config文件夹下建立专门的业务配置文件夹, 例如constants.

  • 文件位置: application/config/path/to/config_file.php
  • 加载方式: 手动加载(或者在autoload.php中配置自动加载).$this->config->load(‘path/to/config_file’, true).第二个参数,会把不同文件的配置分组, 强烈建议加上.
  • 调用方式:  $this->config->item(‘config_item_key’, ‘path/to/config_file’); 第二个参数是上面加载的时候指定的分组

(c) 动态修改配置

CI所有的配置项都是一次加载,同时也支持动态修改配置项。但是暂时不支持指定分组的配置项修改,我自己实现了, 地址:https://github.com/wkupaochuan/analysis-about-ci-frame.git, 路径是application/core/MY_Config.php

  • 单个修改: $this->config->set_item(‘config_item_key’, $value);
  • 批量修改: $this->config->_assign_to_config($array);

(二) 实现方式

(a) Common.php

这个文件中都是全局可以调用的方法,跟config相关的是get_config方法和config_item函数, 主要用在system的框架文件中

  • get_config: require文件application/config/config.php文件,保存在局部静态变量$_config中,所以也是一次加载。这里需要注意的是因为加载的是必须的配置文件config.php,所以使用了require,来进行错误处理
  • config_item: 获取加载过的配置项

(b) system/core/config.php 类

这个类实例化后作为超类CI的一个属性$this->config, 主要方法__construct()、load()、item(), 配置文件加载后赋值给config对象的属性$config, 因为超类CI是全局的,所以这里的配置文件也是一次加载

  • __construct: 默认先加载application/config/config.php文件,调用Common.php文件中的函数get_config
  • load: 根据传入的参数$file,分别在config/ENVIRONMENT/$file和config/$file中寻找目标配置文件,优先加载当前ENVIRONMENT下的配置文件。找到配置文件后会把对应的配置数组merge到已经加载的配置中。这里要十分注意,一旦两个不同的配置文件中存在相同的配置key,又没有指定配置项分组,前面加载的配置项就会被覆盖,所以强烈建议,每次load配置文件都指定第二个参数use_section
  • config_item: 返回已经加载的配置项, 没找到(确实没有的配置项和未加载的配置项)则返回false。

(三)优缺点

(a) 缺点

  • 每次使用$this->config->item(),获取配置项时,有可能因为没有load过对应的配置文件,所以建议load then item, 或者全部配置文件都配置上autoload。这里我自己实现了一个my_item方法my_item($file, $item), 不需要先加载后调用。方法内部会先调用,没有结果会尝试加载一次,然后再次调用并返回结果,一定程度上简化了代码, 而且不需要配置autoload。路径是application/core/MY_Config.php。

(b) 优点

  • 支持目录分级, 方便清晰的组织、管理业务配置文件

ci框架源码分析地址https://github.com/wkupaochuan/analysis-about-ci-frame.git

时间: 2024-10-11 02:21:36

CI源码(一)—config配置文件的相关文章

CI源码引用使用--php引用demo,静态变量和引用关系

CI源码引用使用在Common.php中,加载配置和类的方法 function &test() {     static $a = '';     if (!$a) {         $a = 2;     }     return $a; } $test =& test(); echo $test; $test = 3; echo test();   结果是23 引用:方法和使用方法的变量指向同一块内容:修改使用后的变量,方法内部值也会变 注意:方法和使用都需要&   静态变量

CI源码(一)—Log, 日志

Ci的日志模块是作为一个library来实现以及使用的. (一) 使用方式 (a) 配置 在applicatin/environment/config/config.php中 log_threshold: 可写日志级别阀值.array('ERROR' => '1', 'DEBUG' => '2', 'INFO' => '3', 'ALL' => '4').小于等于阀值的级别都可以写入.配合这evironment的使用,可以在不同的环境下记录不同级别的日志,例如development

CI源码阅读

CodeIgniter源码分析 http://calixwu.com/2014/11/codeigniter-yuanmafenxi.html CI框架源码阅读笔记 http://www.cnblogs.com/ohmygirl/p/4052686.html

源码关联的配置文件

就是在libs目录下创建一个配置文件,里面直接src="源码的路径" 方法/步骤 1 在Eclipse新建Android工程,里面只有一个MainActivity,在点击按钮的时候,我们想调用fastjson把一个Person对象转化成json字符串. 2 但是,如果想查看libs目录下面的fastjson-1.1.21.jar的源码是看不了的. 3 并且也没有附加源码的按钮.如果在fastjson-1.1.21.jar上点击右键->"Properties",

【Spring源码分析】配置文件读取流程

前言 Spring配置文件读取流程本来是和http://www.cnblogs.com/xrq730/p/6285358.html一文放在一起的,这两天在看Spring自定义标签的时候,感觉对Spring配置文件读取流程还是研究得不够,因此将Spring配置文件读取流程部分从之前的文章拆出来单独成为一文. 为了看一下Spring配置文件加载流程,先定义一个bean.xml: 1 <?xml version="1.0" encoding="UTF-8"?>

Spring源码解析和配置文件加载

Spring类的继承结构图: Spring运用了大量的模板方法模式和策略模式,所以各位看源码的时候,务必留意,每一个继承的层次都有不同的作用,然后将相同的地方抽取出来,依赖抽象将不同的处理按照不同的策略去处理. 步骤A. 读取 Resource 文件形成 Document 模型  类图: XmlBeanFactory -> XmlBeanDefinitionReader Spring 使用 XmlBeanDefinitionReader 来读取并解析 xml 文件,XmlBeanDefiniti

【Spring】从源码分析Spring配置文件的加载

使用Spring必须在web.xml中写如下配置: <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-valu

redhat multipath中幸运飞艇源码搭建出售配置文件简要说明

redhat multipath多路径文件大致分为是两个部分,幸运飞艇源码搭建出售Q[1152880099]multipath和device部分. 使用 mpathconf 程序设置多路径,它可创建多路径配置文件 /etc/multipath.conf.如果 /etc/multipath.conf 文件已存在,mpathconf 程序将会编辑该文件.如果 /etc/multipath.conf 文件不存在,mpathconf 程序将使用 /usr/share/doc/device-mapper-

从CI源码学习PHP高级开发技能——CodeIgniter框架源码深度剖析(4):输出类Output.php

Output类参考说明(摘抄CI手册): 在一般情况下,你可能根本就不会注意到输出类,因为它无需你的干涉, 对你来说完全是透明的.例如,当你使用 加载器 加载一个视图文件时,它会自动传入到输出类,并在系统执行的最后由 CodeIgniter 自动调用.尽管如此,在你需要时,你还是可以对输出进行手工处理. 在说Output类前先说几个知识点和编程技巧: $_SERVER['HTTP_ACCEPT_ENCODING'] .对应请求头是Accept-Encoding:"gzip, deflate&qu