无法从另一个控制器

时间:2015-11-05 21:32:51

标签: php opencart opencart2.x

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

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

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

尝试从其他文件夹加载控制器,似乎也没有加载。它接缝只能加载来自普通的'控制器文件夹。

编辑:

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

1 个答案:

答案 0 :(得分:1)

加载控制器的几点事情 -
1st - 您只能从相同的文件夹(admin / catalog)加载控制器 第二 - 你可以从任何子文件夹加载控制器,只需要传递正确的加载路径 3 - 如果Opencart没有该文件而不显示任何错误,则结果将为null / false 4th - 如果你定义任何函数名,那么它将调用该函数,否则将调用index函数,所以在你的case索引中。

第五 - 请使用此

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

而不是

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

6 - 请从php / admin启用调试模式,以便在代码丢弃时知道任何错误。清除error.log,然后尝试加载控制器。

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

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 (或任何大写或小写组合但不包含_)
- 您的类必须具有索引功能,因为在您的情况下,它调用索引