2

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

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

AFAIK,这将:

  1. 从 application/modules/account/libraries/authentication.php 加载“authentication.php”
  2. 从 application/libraries/account/authentication.php 加载“authentication.php”

那么,如果两者都存在呢?实验中,CI 似乎在寻找第一个,如果不存在,它会加载第二个。这种行为是不是很奇怪??这两个文件可能彼此无关。

如果您指的是本地文件还是模块文件,是否没有一种明确声明的方法?

4

1 回答 1

0

AFAIK,没有默认目录application/modules,我在 CI 的文档和源代码中找不到任何参考。
我会说 CI 的行为是根据 no.2
并且确实仔细查看 CI 的加载程序(system/core/Loader.php)揭示了以下内容:

  1. 我们从函数“库”开始
  2. 哪个调用函数'_ci_load_class'

'_ci_load_class' 将您传递的库名反汇编为两部分:子目录和类名。

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

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

编辑:
我刚刚注意到你用 标记了你的问题hmvc,它确实使用了一个modules目录。
不幸的是,我没有这方面的经验。
我会(显然)假设这是导致您描述的行为的原因。

于 2012-07-31T19:33:31.830 回答