CodeIgniter - 无法在子文件夹中加载库

时间:2014-06-06 19:20:39

标签: php codeigniter

我遇到了一个奇怪的情况。我正在处理现有CodeIgniter应用程序的一部分。我不知道应用程序的修改程度有多广,但我的理解是核心代码尚未修改 - 客户端只是在核心代码之上添加了更多代码。

我已将图书馆放入子文件夹,我试图加载它,但它失败了。为了确保它不是库中的东西,我只是使用一个空的SampleLibrary尝试了同样的事情并得到了相同的结果。

所以,这有效:

$this->load->library('SampleLibrary');

但是,如果我将同一个库移动到子文件夹" xyz"并更新代码,它不起作用:

$this->load->library('xyz/SampleLibrary');

当它失败时,它似乎不会抛出异常。它只是在页面上显示一条消息:

An Error Was Encountered
Unable to load the requested class: xyz/samplelibrary

......然后退出。我添加了一个try / catch块,catch代码永远不会运行。我无法更改config.php以更改任何日志记录参数。

有关如何获取有关正在进行的更多调试信息的任何想法?

2 个答案:

答案 0 :(得分:2)

所以我能够快速查看一下load->库代码正在做什么。显然,它尝试了一些变种并且失败了:

ucfirst()正在对传入值运行,因此它最初在寻找:

libraries/Xyz/SampleLibrary.php

...因为我在Linux上,这些大写很重要,而且无法找到带有大写名称的文件夹。

它还搜索了整个低级的东西:

libraries/xyz/samplelibrary.php

所以它缺少真正的文件名,即:

libraries/xyz/SampleLibrary.php

所以我想我只需要使用Xyz作为我的文件夹名称。很奇怪,但是很好......

答案 1 :(得分:0)

您要加载库的位置:

$this->load->library('SampleLibrary');
$vars_returned_here = $this->sample_library_function($data);

在libraries文件夹中创建一个名为SampleLibrary.php的文件。在该文件中:

class Samplelibrary {

    private $CI;
    private $errors;
    private $response;

    function __construct() {
        $this->CI = &get_instance();
    }

    function sample_library_function($data) {
        require('xyz/SampleLibrary');
            //do your thing
            //$vars = ...
            return $vars;

    }

}