CodeIgniter从视图加载控制器

时间:2011-04-29 16:16:39

标签: php codeigniter

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

这就是我的意思.. 我想多次使用一个视图,但是这个视图是由单独的控制器加载的,它提供了视图,来自db.So的信息,因为模型中的信息我不能只设置$this-load->view();等。有办法做这件事,还是有更好的方法?

5 个答案:

答案 0 :(得分:4)

我认为很多网站都面临着类似的挑战,包括我正在努力的一个网站几乎每个页面都将相同的数据库内容加载到侧边栏中。我通过库和帮助器的组合来实现它:

  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>

答案 1 :(得分:3)

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

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

  1. 重复使用模型。您的模型应该非常简单,从中选择数据,并且应该很流畅,但是如果你一遍又一遍地做同样的事情它似乎笨。在这种情况下......

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

我会使用library

通过这种方式,您可以将数据检索包装在可以从任何您喜欢的控制器调用的可重用软件包中。

答案 4 :(得分:0)

就这样做 如果您的控制器命名为controller1 将链接放在视图中就像那样

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

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

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

就是这样