繁体   English   中英

CodeIgniter 从视图加载 controller

[英]CodeIgniter load controller from view

有没有办法从视图中加载 controller?

这是我想要的。我想多次使用一个视图,但是这个视图是由单独的 controller 加载的,它给出了视图,来自 db.So 由于来自 model 的信息,我不能只设置$this-load->view(); 等等。有没有办法做这件事,或者它有更好的方法?

我认为很多网站都面临着类似的挑战,包括我正在研究的一个,它将相同的数据库内容加载到网站几乎每个页面的侧边栏中。 我结合了一个库和一个助手来实现这一点:

  1. 将数据逻辑放入库中(我的名为 common.php)。 除了与数据库交互之外,您可能希望库将数据存储在局部变量中,以防您想在一次加载时多次引用它。
     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; }
  2. 创建一个帮助程序来加载库。 (不要在视图中加载库:)我有 MY_text_helper 加载库并返回数据:

     function total_items() { $CI =& get_instance(); return $CI->common->get_total_items(); }

  3. 从视图中调用助手 function。

     <p> Total items: <?php echo total_items(); ?> </p>

简而言之,您不能也不应该从视图中加载 controller。 可悲的是,我理解您的沮丧,因为您想在多个视图中重复使用 controller 中的模型拉动/执行逻辑。

有多种方法可以做到这一点;

  1. 重复使用模型。 你的模型对于 select 数据应该非常简单,并且应该很时尚,但如果你一遍又一遍地做同样的事情,它看起来确实很愚蠢。 在这种情况下...

  2. 使用 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM