控制器内部的控制器..也许我';I’我错了


Controller inside a controller... maybe I'm wrong

我有一个"标准"页面布局。

页眉、页脚、左侧的主要内容块和右侧的侧边栏。

现在这一切都很好,除了侧边栏在每个控制器中复制,但需要一个控制器才能正常工作。有时用户可能已经登录,因此会有一些不符合名称的工作。此外,那里将有一个购物车,它将从MySQL数据库运行。

我不想在我的每个控制器中复制这个代码。

我该如何制作一个控制器来构建侧边栏,加载视图和所有我可以"包括"到页面中的内容(就像我会包括一个视图一样)。

我可以考虑创建一个sidebar类/对象,我可以将其实例化并"添加到视图中"。

我该怎么做?

感谢

听起来模块化扩展HMVC可能是一个很好的解决方案。我链接的wiki包括一些例子。

当我过去在Codeigniter中遇到这个问题时,我已经构建了一个钩子,它加载post_controller_conconstructor,执行一些逻辑,然后加载sidebar.php视图。它相当简单,不需要那么多努力。

唯一的问题是,如果不使用模板,那么它可能会打乱调用视图的顺序。例如,如果您习惯于:

public function index()
{
    $this->load->view("header.php");
    $this->load->view("my_awesome_page.php", $this->data);
    $this->load->view("footer.php");
}

然后你必须修改它,以意识到侧边栏将是最后调用的东西,并将页脚放在那里。通常,我会让Hook检查CI对象中的变量,看看是否需要侧边栏,然后如果不需要,就直接吐出footer.php。

我很有信心钩子就是你要找的。

我最终创建了一个库,它完成了我需要的东西。这很有效。库可以像简单的控制器一样有效地制作,并可以在任何地方包含在其中。:)