【问题标题】:CodeIgniter load controller from viewCodeIgniter 从视图中加载控制器
【发布时间】:2014-03-03 12:02:28
【问题描述】:

有没有办法从视图中加载控制器?

这就是我所追求的.. 我想多次使用一个视图,但是这个视图是由单独的控制器加载的,该控制器提供视图,来自数据库的信息。所以由于来自模型的信息,我不能只设置$this-load->view();等等。有吗做这件事的方法,还是有更好的方法?

【问题讨论】:

  • 您能否提供您网站代码的示例/它的作用?

标签: php codeigniter


【解决方案1】:

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

  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. 从视图中调用辅助函数。

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

【讨论】:

  • 很有趣的做法,它看起来很像 wordpress-ish 而不是很 codeigniter-y。如果有许多不同的文件都包含该库并调用它;您可能做错了,尤其是在创建侧边栏时。相反,它们应该被包装到模板控制器中。
  • 我不确定我是否理解“wordpress-ish”与“codeigniter-y”,但我总是愿意接受更好的建议,将我的 sidebar.php 存根包含在任何视图中,而无需复制跨所有控制器的代码。 (另外,MVC 框架中的“模板控制器”是什么?您的意思是创建一个 MY_Controller 包装器而不是处理逻辑?)
  • 嗨。感谢您的指导。我只需要知道为什么要同时加载库和助手。非常感谢。
【解决方案2】:

简单地说,您不能也不应该从视图中加载控制器。很遗憾,我理解您的沮丧,因为您想在多个视图中重复使用控制器中的模型拉取/执行逻辑。

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

  1. 重用模型。您的模型应该很容易从中选择数据,而且应该很时尚,但是如果您一遍又一遍地做同样的事情,它似乎愚蠢的。在这种情况下...

  2. 将控制器用作“主容器”,并根据您需要的任何逻辑对其进行extend。所以你基本上使用控制器作为模板,从模型中提取数据,加载适当的视图。

【讨论】:

    【解决方案3】:

    MVC 不能那样工作......只需重新使用模型 - 这就是它与控制器分开的原因。如果这不符合您的需求,您可能应该实现一个执行逻辑的库。

    【讨论】:

    • 是的,我知道,但只是问..视图的许多实现没有问题,但它更长。库可能就是答案:)
    【解决方案4】:

    我会使用library

    这样,您可以将数据检索封装在一个可重用的包中,您可以从您喜欢的任何控制器调用该包。

    【讨论】:

      【解决方案5】:

      只要这样做 如果您的控制器名为 controller1 像这样在视图中放置一个链接

      http://your-site.com/index.php/controller1/

      如果您想要特定功能,请将其添加到您的网址中

      http://your-site.com/index.php/controller1/myfunction

      就是这样

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多