CodeIgniter模块加载会造成与本地类的路径冲突


CodeIgniter module loading creates path clash with local classes?

使用CodeIgniter,从控制器(application/controllers/home.php)观察行:

$this->load->library(array('account/authentication'))

AFAIK,这将:

  1. 从加载"authentication.php"application/modules/account/librarys/authentication.php
  2. 从application/librarys/account/authentication.php加载"authentication.php"

那么,如果两者都存在呢?在实验中,CI似乎在寻找第一个,如果不存在,它就会加载第二个。这不是一种奇怪的行为吗??这两个文件可能没有任何关系。

是否有一种方法可以明确地声明您引用的是本地文件还是模块文件?

AFAIK,没有默认目录application/modules,我在CI的文档和源中找不到任何引用
我想说CI的行为符合第2条
事实上,仔细查看CI的加载器(system/core/loader.php)会发现以下内容:

  1. 我们从函数"库"开始
  2. 它调用函数"_ci_load_class"

'_ci_load_class'将传递的库名称反汇编为两部分:subdir和类名。

首先,它在libraries/subdir/class中查找类。如果它发现它很好,就会加载它。
如果在那里没有找到类,它会在其他一些预定义的路径($this->_ci_library_paths)中查找它
如果仍然找不到库,它会进行最后一次尝试,并在libraries/class/class中查找它。

我唯一能想到的是,您定义了一个指向modules目录的自定义库路径。但即便如此,CI也应该在modules/libraries/account/authentication.php中查找库。

编辑:
我刚刚注意到您用hmvc标记了您的问题,确实使用了modules目录
不幸的是,我没有使用它的经验。
我(显然)认为这就是你所描述的行为的原因。