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


Unable to load controllers from another controller

我正试图在另一个控制器中加载一个控制器。

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

然而,当我试图加载一个控制器时,这似乎不起作用,该控制器与我正在加载的控制器位于同一文件夹中。

尝试从其他文件夹加载控制器,但似乎也没有加载。它只能从"公共"控制器文件夹中进行接缝加载。

编辑:

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

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

第五-请使用此

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

代替

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

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

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

echo 'here';

在你看来。如果OC没有返回这个结果,这意味着你在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-文件类名必须是ControllerAccountComTopMenu(或任何大写或小写组合,但不带_)
-您的类必须具有index函数,因为在您的情况下它调用index