刚接触一个基于CodeIgniter(以下简称CI)的cms–dilicms,虽然这个只有后台功能,但是对我理解CI应该会有不小的帮助。
在后台提交一个form表单的时候,发现dilicms木有提交到当前那个函数下,而是提交到了原函数名的扩展上,比如这样的一个form表单
<div><form action="http://localhost/dili/index.php/admin/setting/site?tab=site_basic" method="post"></div>
按照CI的路径规则,这个表单应该提交到setting控制层的site函数中,通过site函数来处理提交过来的表单,但是,事实上并不是这样的,在控制层直接执行了_site_post()这个函数了。于是把整个CI从index.php页面一步一步往下查看代码,最终发现是dilicms的左右调用了CI的hooks,调用方法如下:
/*
* ------------------------------------------------------
* Is there a "pre_controller" hook?
* ------------------------------------------------------
*/
$EXT->_call_hook('pre_controller');
所以在执行调用方法前,通过这个hooks改变了method的值,这个hooks代码如下:
class MethodHook {
//var $ci ; //maybe useful later
function __construct()
{
//$this->ci = &get_instance();
}
function redirect()
{
global $method;
if( $_SERVER['REQUEST_METHOD'] == 'POST' )
{
$method = '_'.$method.'_post';
}
}
}
从而,每次当有数据post的过来,原来的操作函数就被换掉了。
暂时还不明白这样做的好处,但是dilicms还得研究下去,慢慢摸索中。。