+ -
当前位置:首页 → 问答吧 → 配置说明

配置说明

时间:2011-04-17

来源:互联网



一, 配置容易出现的误解。
   并非所有的配置项在分组配置文件或者模块配置文件中配置都会生效。
   原因很简单, 有些配置项在加载分组配置文件之前就使用了。 比如APP_GROUP_LIST, 系统要先读取APP_GROUP_LIST 才知道有哪些分组, 然后才加载当前分组的配置。 也就是说APP_GROUP_LIST 这个配置项 在加载分组配置文件之前 就被使用了, 那么我们在分组配置文件中定义 APP_GROUP_LIST 配置项 会起作用吗?
   在分组配置文件中 不会起作用的配置项还有:
(1)系统变量相关: VAR_GROUP,VAR_MODULE,VAR_ACTION,VAR_ROUTER,VAR_PAGE,VAR_TEMPLATE,VAR_LANGUAGE,VAR_AJAX_SUBMIT,VAR_PATHINFO
(2)URL以及路由相关:
URL_HTML_SUFFIX,URL_PATHINFO_DEPR,URL_PATHINFO_MODEL,URL_MODEL,URL_ROUTE_RULE,URL_ROUTER_ON
(3)分组配置项目:
APP_GROUP_LIST ,DEFAULT_GROUP
(4)其他:
APP_DEBUG,APP_PLUGIN_ON,APP_AUTOLOAD_REG,SESSION_AUTO_START,DEFAULT_TIMEZONE等。

注:不能在分组配置文件或者模块配置文件中配置的配置项基本会在ThinkPHP/Lib/Think/Util/Dispatcher.class.php 中使用。

二,分享一点配置的应用技巧。
    我们如果想通过读取数据库信息进行配置,从而用户可以通过后台更改配置怎么做?
假设数据表为 Think_config, 有字段id(主键) name(配置项名称) value(配置项值), (当然你还可以根据自己的实际情况增加其他字段)
方法1, 建立公用类, 建立一个 CommonAction.class.php 让其他控制器都继承与 CommonAction (如果你不知道怎么实现,可以查看官方示例代码中的RBAC,看看它是怎么实现的)
在公用类中定义一个初始化函数。

  1. <?php
  2. class CommonAction extends Action{
  3.     function _initialize(){
  4.         $config=M('Config')->getField('name,value');
  5.         C($config);
  6.     }
  7. }
  8. ?>
复制代码
和分组配置一样, 这样配置也会有些配置项不会生效。 不会生效的配置项也基本和分组的相同。


如果你想所有配置项都能通过读取数据库来配置, 那么只需要更改一点核心代码就行了。
ThinkPHP/Lib/Think/Core/App.class.php  大约第53行,  在注视 //[/RUNTIME]  之下 加入代码

  1. //[/RUNTIME]
  2. $config=M('Config')->getField('name,value');
  3. C($config);
  4. // 设置系统时区 PHP5支持
复制代码
这样基本所有的配置都能通过读取数据库了(除数据库相关配置项以外)


以后可考虑增加“配置扩展”的功能, 大家就不用修改核心代码了。

作者: luofei614   发布时间: 2011-04-17

谢老大.

作者: hexuan1922   发布时间: 2011-04-17

热门下载

更多