【发布时间】:2014-03-03 12:02:28
【问题描述】:
有没有办法从视图中加载控制器?
这就是我所追求的..
我想多次使用一个视图,但是这个视图是由单独的控制器加载的,该控制器提供视图,来自数据库的信息。所以由于来自模型的信息,我不能只设置$this-load->view();等等。有吗做这件事的方法,还是有更好的方法?
【问题讨论】:
-
您能否提供您网站代码的示例/它的作用?
标签: php codeigniter
有没有办法从视图中加载控制器?
这就是我所追求的..
我想多次使用一个视图,但是这个视图是由单独的控制器加载的,该控制器提供视图,来自数据库的信息。所以由于来自模型的信息,我不能只设置$this-load->view();等等。有吗做这件事的方法,还是有更好的方法?
【问题讨论】:
标签: php codeigniter
我认为很多网站都面临着类似的挑战,包括我正在开发的一个网站,它会将相同的数据库内容加载到网站几乎每个页面的侧边栏中。我结合了一个库和一个助手来实现这个:
public function get_total_items()
{
if ($this->_total_items === NULL)
{
$row = $this->ci->db->query("SELECT COUNT(*) FROM items")->row();
$this->_total_items = $row[0];
}
return $this->_total_items;
}
创建一个助手来加载库。 (不要在视图中加载库!)我有 MY_text_helper 加载库并返回数据:
function total_items()
{
$CI =& get_instance();
return $CI->common->get_total_items();
}
从视图中调用辅助函数。
<p> Total items: <?php echo total_items(); ?> </p>
【讨论】:
简单地说,您不能也不应该从视图中加载控制器。很遗憾,我理解您的沮丧,因为您想在多个视图中重复使用控制器中的模型拉取/执行逻辑。
有多种方法可以做到这一点;
重用模型。您的模型应该很容易从中选择数据,而且应该很时尚,但是如果您一遍又一遍地做同样的事情,它似乎愚蠢的。在这种情况下...
将控制器用作“主容器”,并根据您需要的任何逻辑对其进行extend。所以你基本上使用控制器作为模板,从模型中提取数据,加载适当的视图。
【讨论】:
MVC 不能那样工作......只需重新使用模型 - 这就是它与控制器分开的原因。如果这不符合您的需求,您可能应该实现一个执行逻辑的库。
【讨论】:
我会使用library。
这样,您可以将数据检索封装在一个可重用的包中,您可以从您喜欢的任何控制器调用该包。
【讨论】:
只要这样做 如果您的控制器名为 controller1 像这样在视图中放置一个链接
http://your-site.com/index.php/controller1/
如果您想要特定功能,请将其添加到您的网址中
http://your-site.com/index.php/controller1/myfunction
就是这样
【讨论】: