[英]CodeIgniter load controller from view
有没有办法从视图中加载 controller?
这是我想要的。我想多次使用一个视图,但是这个视图是由单独的 controller 加载的,它给出了视图,来自 db.So 由于来自 model 的信息,我不能只设置$this-load->view();
等等。有没有办法做这件事,或者它有更好的方法?
我认为很多网站都面临着类似的挑战,包括我正在研究的一个,它将相同的数据库内容加载到网站几乎每个页面的侧边栏中。 我结合了一个库和一个助手来实现这一点:
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(); }
从视图中调用助手 function。
<p> Total items: <?php echo total_items(); ?> </p>
简而言之,您不能也不应该从视图中加载 controller。 可悲的是,我理解您的沮丧,因为您想在多个视图中重复使用 controller 中的模型拉动/执行逻辑。
有多种方法可以做到这一点;
重复使用模型。 你的模型对于 select 数据应该非常简单,并且应该很时尚,但如果你一遍又一遍地做同样的事情,它看起来确实很愚蠢。 在这种情况下...
使用 controller 作为“主容器” ,并根据您需要的任何逻辑对其进行extend
。 因此,您基本上使用 controller 作为模板,从 model 中提取数据,加载适当的视图。
MVC 不能那样工作......只需重新使用 model - 这就是它与 controller 分开的原因。 如果这不符合您的需求,您可能应该实现一个执行逻辑的库。
如果您名为 controller1 的 controller 像这样在视图中放置一个链接,请执行此操作
http://your-site.com/index.php/controller1/
如果您想要特定的 function 将其添加到您的 url
http://your-site.com/index.php/controller1/myfunction
而已
我会使用图书馆。
这样,您可以将数据检索包装在可重用的 package 中,您可以从任何您喜欢的 controller 调用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.