php-codeigniter-pyrocms拦截并修改所有查询;扩展活动记录
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php-codeigniter-pyrocms拦截并修改所有查询;扩展活动记录,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2440字,纯文字阅读大概需要4分钟。
内容图文
![php-codeigniter-pyrocms拦截并修改所有查询;扩展活动记录](/upload/InfoBanner/zyjiaocheng/674/cb4bd37375af4add9a98119706c41216.jpg)
有没有办法在修改DB_active_record.php之前捕获所有查询并对其进行修改,然后再发送给数据库?这将是理想的,尽管我不反对修改此文件(如果它是唯一的选择).
我可以从模型中调用这些东西,但是如果这是在后台完成的,以免留出遗忘的时间和地点,那会更好.最好在后台完成.
我正在使用一个库来加密查询数据.在库中,我正在检查某些密钥是否不加密,因此这不仅是对所有数据进行加密的问题,还包括对每个查询中的某些数据进行加密的问题.
例如,像这样修改insert():
function insert($table = '', $set = NULL)
{
if ( ! is_null($set))
{
$this->CI =& get_instance();
$this->CI->load->library('my_encrypt');
$set = $this->CI->my_encrypt->encrypt_query($set);
$this->set($set);
}
在发送到数据库之前可以正确地加密数据.但是,这对更新/集或解密均无效.
有没有办法在模型和活动记录之间建立中介或其他媒介,我可以在将相关数据发送到AR或返回模型之前对其进行加密和解密?
谢谢.
更新:
因此,按照下面的指南进行操作即可.我使用的是pyroCMS(版本1.3.2社区; CI版本2.0.2),它已经完成了一些工作.
这是我所做的.
system / cms / core / MY_Loader.php扩展了MX_loader,后者扩展了CI_Loader;因此MX_Loader是需要修改的内容.
系统/ cms /库/MX/Loader.php
将公共函数database()更改为:
public function database($params = '', $return = FALSE, $active_record = NULL) {
log_message('debug', 'db loader from MX/Loader');
// Grab the super object
$CI =& get_instance();
// Do we even need to load the database class?
if (class_exists('CI_DB') AND $return == FALSE AND $active_record == NULL AND isset($CI->db) AND is_object($CI->db)) {
return FALSE;
}
require_once(BASEPATH.'database/DB'.EXT);
// Load the DB class
$db =& DB($params, $active_record);
//get the driver name, set its path and load er up
$my_driver = config_item('subclass_prefix').'DB_'.$db->dbdriver.'_driver';
$my_driver_file = APPPATH.'core/'.$my_driver.EXT;
if (file_exists($my_driver_file)) {
require_once($my_driver_file);
$db = new $my_driver(get_object_vars($db));
}
if ($return === TRUE) {
return $db;
}
CI::$APP->db = DB($params, $active_record);
return CI::$APP->db;
}
这里与接受的答案中链接的文章的重要区别在于db vars的设置,因为pyro与常规CI不同.
然后在system / cms / core中添加自定义的驱动程序文件MY_DB_mysql_driver.php.然后将加载它,并且这些方法将在所有模型中可用.同样,此处使用与DB_active_rec.php中相同名称的方法将优先.例如在MY_DB_mysql_driver.php中添加插入方法将覆盖DB_active_rec.php中的插入方法.
解决方法:
默认情况下,您不能扩展活动记录类.但是,您可以在扩展加载程序类数据库调用以允许它之后,扩展活动记录类:
说明和代码在这里:http://www.simonemms.com/code/extending-the-codeigniter-database-class/
内容总结
以上是互联网集市为您收集整理的php-codeigniter-pyrocms拦截并修改所有查询;扩展活动记录全部内容,希望文章能够帮你解决php-codeigniter-pyrocms拦截并修改所有查询;扩展活动记录所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。