是否有任何简单的解决方案可以将$ this->数据变量从父控制器传递给所有子控制器。
我尝试的所有内容都将空数组带给孩子。
当我更改文件" system / engine / controller.php"如下所示:
protected function getChild($child, $args = array()) {
$action = new Action($child, $args);
if (file_exists($action->getFile())) {
require_once($action->getFile());
$class = $action->getClass();
$controller = new $class($this->registry);
//$controller->{$action->getMethod()}($action->getArgs());
$controller->{$action->getMethod()}($action->getArgs()+array('parent-data'=>$this->data));
return $controller->output;
} else {
trigger_error('Error: Could not load controller ' . $child . '!');
exit();
}
}
然后我尝试阅读变量' parent-data'从子控制器中传递的参数:
if (isset($setting['parent-data'])) {
echo "<pre>".print_R($setting['parent-data'],true)."</pre>";
}
结果我得到一个空数组:
Array
(
[modules] => Array
(
)
)
答案 0 :(得分:1)
数据变量为空。这就是为什么它打印空白数组。 此外,没有必要传递数据变量。它是一个全局变量,你将获得它直到.tpl文件。
答案 1 :(得分:0)
问题在于父控制器是具有空数据变量的列控制器,而不是具有必要数据变量的主页父控制器。
答案 2 :(得分:0)
在opencart2上,可能更老:
ex:从父控制器product-custom到子控制器头文件解析ver(步骤)
父
<?php
class ControllerProductCustom extends Controller {
private $error = array();
public function index() {
$this->load->language('product/product');
...
$data['footer'] = $this->load->controller('common/footer');
$data['header'] = $this->load->controller('common/header', array('steps' => true));
子
<?php
class ControllerCommonHeader extends Controller {
public function index($arg) {
$data['title'] = $this->document->getTitle();
if (isset($arg['steps'])) $data['steps'] = $arg['steps'];
...