我有一个项目,其中包含几个控制器,视图和助手(原来的开发人员,从我接替的工作,没有费心使用模型)。在其中一个控制器(Iframes.php)中,(当然)有一个函数__construct(),一个index()和一个名为view()的函数。在这个结构中,有一个$this->load->helper('iframes');没有加载其他帮助程序。
正在访问的网址是https://website.ext/iframes/view/1234567890
在iframes_helper.php中,没有任何对其他helper文件的引用。但是iframes_helper.php调用了一个名为get_loans()的函数。该函数只存在于一个文件中:loans_helper.php
有其他的控制器加载loans_helper.php(以其正常方式)。
如果我重命名loans_helper.php(为loans_helper.php1),系统将无法加载,说明文件丢失。它没有告诉我哪里有被引用到缺失的文件。
我已经搜索了所有的文件
load->helper('loans')
甚至
load->helper('loans
和
('loans')
但是没有指向loans_helper文件的引用。至少在Iframes控制器中使用的控制器或属于它的文件中不会。
但是函数get_loans仍然是可访问的。这怎么可能呢?或者更确切地说:我如何找到正在加载帮助器的位置?
艾伯特
请告诉我,如果我需要添加一些代码。
您还应该使用双引号搜索'loan'的变体,"loan
,因为这也是有效的。
在loans_helper.php
文件的顶部,添加debug_print_backtrace(); die;
,它将输出一些关于执行路径的有用信息。请注意,如果在浏览器中进行测试,则应该查看页面的源代码,以获得更可用的格式。从回溯中,您将能够确定文件是如何被包含的(即通过CI的加载器系统,或直接通过include
或require
)。
这是debug_print_backtrace()
的PHP文档
最后,这里有一些关于在哪里可以包含这样一个文件的其他想法:
- CI的
autoload.php
配置文件。有一个自动加载帮助文件的项。 - 如果项目中存在Composer,请检查该Composer。
- 从技术上讲,CI的helper文件不需要通过CI的加载器包含,所以该文件可能需要使用
include
或require
手动包含。