无法从另一个控制器加载控制器

Unable to load controllers from another controller

我正在尝试将一个控制器加载到另一个控制器中。

$data['com_top_menu'] = $this->load->controller('account/com_top_menu');

但是,当我尝试加载与我从中加载它的控制器位于同一文件夹中的控制器时,这似乎不起作用。

尝试从其他文件夹加载控制器,但似乎也无法加载。它只能从 'common' 控制器文件夹加载。

编辑:

实际上控制器似乎正在加载。如果我在加载的控制器中间放置一个回声,它将在呈现模板之前显示输出。因此,看起来控制器已加载并且不会通过渲染视图输出任何内容,除非它是公共文件夹内的控制器。 文件都已就位,控制器加载,它只是不通过视图输出任何内容。

加载控制器的一些东西-
第一 - 您只能从相同的文件夹(管理员/目录)加载控制器。
第二 - 你可以从任何子文件夹加载控制器,只需要传递正确的加载路径。
第三 - 如果 Opencart 没有该文件,那么它不会显示任何错误,结果将为 null/false。
4th - 如果您正在定义任何函数名称,那么它将调用该函数,否则将调用索引函数,因此在您的情况下索引。

第 5 - 请使用这个

 return  $this->load->view('your.tpl', $data);

而不是

$this->response->setOutput($this->load->view('your.tpl', $data));

6th - 请从 php/admin 启用你的调试模式,这样如果你的代码抛出任何错误,你就会知道。清除你的 error.log 然后尝试加载控制器。

7th - 如果所有这些点都是代码不起作用,那么做一件事 - 添加一个带有索引功能的空白控制器,只需添加一行,这样你就可以 return 它是视图的结果,然后

echo 'here';

在你看来。如果 OC 没有 returning 这个结果,这意味着你的 Opencart 文件有错误,否则你的代码有错误。

你可以说它们在某种程度上是相同的(我并不是说完全一样,也不想伤害任何人的感情;))但是这个代码

$this->load->controller('account/com_top_menu');

等于(基于您的自动加载器)

$obj = new ComTopMenu; //assuming your class name
$data['com_top_menu'] = $obj->index();

所以对于您的解决方案,请检查
- 您的目录 > 控制器 > 帐户 >
中有文件 com_top_menu.php - 您的文件 class 名称必须是 ControllerAccountComTopMenu(或任何大写或小写组合,但不包含 _)
- 你的 class 必须有索引函数,因为在你的情况下它调用 index.