我正试图在另一个控制器中加载一个控制器。
$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。