CI多环境配置与hooks做权限出现的问题
来源:互联网 发布:淘宝客服 编辑:程序博客网 时间:2024/06/05 23:53
通常 一个项目会存在生产环境(production)和开发环境(development),两者的配置往往不一样。如:production连接正式数据库,而development连接测试数据。CI框架提供了多环境配置的办法。继上次在hooks中对CI做了简单权限验证后,需要配置CI多环境。hooks做权限验证链接:>http://blog.csdn.net/xiojing825/article/details/72486068
一.CI 多环境配置文档地址
http://codeigniter.org.cn/user_guide/libraries/config.html
引用原文:
多环境
你可以根据当前的环境来加载不同的配置文件,index.php 文件中定义了 ENVIRONMENT 常量,在 处理多环境 中有更详细的介绍。要创建特定环境的配置文件,新建或复制一个配置文件到application/config/{ENVIRONMENT}/{FILENAME}.php 。
例如,要新建一个生产环境的配置文件,你可以:
新建目录 application/config/production/
将已有的 config.php 文件拷贝到该目录
编辑 application/config/production/config.php 文件,使用生产环境下配置
二.程序:
1.在index.php定义环境变量ENVIRONMENT 的值为“development” 。
//注释默认的ENVIRONMENT定义,实际不注释也可以,因为默认ENVIRONMENT 的值就是“development” //define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');define('ENVIRONMENT', 'development');
2.在application/config下新建文件夹development,复制config/config.php 到development下。
3.在application/config/development/config.php 添加配置
////测试环境的mysql$config['dev_mysql_host'] = 'mysql:host=121.*.***.64;dbname=sdk;port=20000;charset=utf8';$config['dev_mysql_username'] = 'username';$config['dev_mysql_password'] = 'password';
经过以上步骤后所有继承自CI_Controller 的类就可使用$this->config->item(‘dev_mysql_username’);读取application/config/development/config.php 中的配置参数。
4.定义AdminDB的类,application/libraries /AdminDB.php 中代码:
<?phpnamespace libraries;define('__ROOT__', dirname(dirname(dirname(__FILE__))));include_once __ROOT__ . "/vendor/autoload.php";class AdminDB{ static $db = NULL; public static function __callStatic($name, $arguments) { $ci = &get_instance(); $host = $ci->config->item('dev_mongo'); if (self::$db == NULL) { self::$db = (new \MongoDB\Client($host))->selectDatabase('my_db'); } return \call_user_func_array([self::$db, $name], $arguments); }}
在hooks 类application/hooks/checkLogin.php 中做登录验证用到了AdminDB 类。而AdminDB并不是继承自CI_Controller。为了能够读取配置参数,使用$ci = &get_instance();获得一个CodeIgniter的超级对象。然而程序运行时这一行报错:
$host = $ci->config->item('dev_mongo');//var_dump($ci);//打印$ci为NULL
找了半天发现application/config/hooks.php 文件中 ,设置的checkLogin 为“pre_controller”,即调用控制器前执行,而在“pre_controller”这个阶段使用get_instance()无法获取到超级对象。
$hook['pre_controller'] = array( 'class' => 'checkLogin', 'function' => 'index', 'filename' => 'checkLogin.php', 'filepath' => 'hooks', //可不传参数 //'params' => array('beer', 'wine', 'snacks'));
将“pre_controller”改成“post_controller_constructor”。让hooks类checkLogin在控制器实例化之后立即执行。程序不再报错,即AdminDB中的$ci = &get_instance();获取到了超级对象。
$hook['post_controller_constructor'] = array( 'class' => 'checkLogin', 'function' => 'index', 'filename' => 'checkLogin.php', 'filepath' => 'hooks',);
三、总结:
同理,可参照二中的步骤,配置production 环境。在代码提交时,不让开发环境中的index.php覆盖生产环境中index.php ,就可以做到开发、生产环境使用不同的配置参数。
- CI多环境配置与hooks做权限出现的问题
- CI 框架利用hooks 做登录/权限验证
- ci多环境配置config
- ci框架hooks使用
- 安卓环境配置出现的问题
- Android 环境配置出现的各种问题
- hadoop环境配置出现的问题
- svn hooks 遇中文出现乱码问题
- CI框架下hooks使用说明以及它的作用
- 【CI】Jenkins环境配置
- Linux环境下的持续集成之Hudson CI服务器的安装与配置
- [CI Architect] gitolite3的安装与配置
- OpenGL 入门学习-—Visual Studio 2010环境配置,及过程出现的问题与解决方案
- 在Mac OS X 环境下配置Intellij IDEA+Tomcat及Tomcat出现权限问题
- Mac 简单配置php环境 没有权限的问题
- Mac Apache 配置与出现的问题
- post-commit,hooks 让svn服务器与测试环境的代码保持一致
- 解决 django1.2环境中使用自带的admin管理界面,配置后访问出现“你无权限修改任何东西” 的问题
- SDUT 3929 校赛 D 魔戒
- Docker推送到我的仓库
- 文章标题
- C++设计模式——桥接模式
- maven 3 自动创建目录骨架
- CI多环境配置与hooks做权限出现的问题
- 更快的AtomicInteger
- 使用JDBCTemplate实现与Spring结合,方法公用 ——共用实现类(BaseImpl)
- Zookeeper单机伪集群配置
- udp通信
- hadoop put 强制覆盖文件
- Git基础-取得项目的Git仓库
- c++异常
- 大型网站架构从零开始