我遇到了一个奇怪的情况。我正在处理现有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以更改任何日志记录参数。
有关如何获取有关正在进行的更多调试信息的任何想法?
答案 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;
}
}