CodeIgniter模块加载是否与本地类创建路径冲突?

时间:2012-07-31 16:18:03

标签: php codeigniter hmvc

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

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

AFAIK,这将:

  1. 从中加载'authentication.php' application / modules / account / libraries / authentication.php
  2. 从application / libraries / account / authentication.php
  3. 加载'authentication.php'

    那么,如果两者都存在怎么办?试验,似乎CI寻找第一个,如果不存在,则加载第二个。是不是那种奇怪的行为?这两个文件可能彼此无关。

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

1 个答案:

答案 0 :(得分:0)

AFAIK,没有默认目录application/modules,我在CI的文档和来源中找不到任何引用。
我会说CI的行为是根据第2号 确实仔细看看CI的加载器(system/core/Loader.php)揭示了以下内容:

  1. 我们从功能'library'
  2. 开始
  3. 调用函数'_ci_load_class'
  4. '_ ci_load_class'将您传递的库名称反汇编为两部分:subdir和class name。

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

    我唯一能想到的是,您已经定义了一个指向modules目录的自定义库路径。但即使这样,CI也应该在modules/libraries/account/authentication.php中寻找图书馆。

    修改
    我刚刚注意到您使用hmvc标记了您的问题,确实使用modules目录。
    不幸的是,我没有经验 我(显然)会假设这导致你描述的行为。