Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 来自视图的CodeIgniter负载控制器_Php_Codeigniter - Fatal编程技术网

Php 来自视图的CodeIgniter负载控制器

Php 来自视图的CodeIgniter负载控制器,php,codeigniter,Php,Codeigniter,有没有办法从视图加载控制器 这就是我所担心的。。 我想多次使用一个视图,但是这个视图是由单独的控制器加载的,该控制器提供了来自db的视图信息。因此,由于来自模型的信息,我不能只设置$this load->view()等等。有没有一种方法可以做到这一点,或者有更好的方法 MVC不是那样工作的。。。只需重新使用模型-这就是它与控制器分离的原因。如果这不符合您的需要,您可能应该实现一个执行逻辑的库。简单地说,您不能也不应该从视图加载控制器。很遗憾,我理解您的沮丧,因为您希望在多个视图中重复使用控制器中

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

这就是我所担心的。。
我想多次使用一个视图,但是这个视图是由单独的控制器加载的,该控制器提供了来自db的视图信息。因此,由于来自模型的信息,我不能只设置
$this load->view()等等。有没有一种方法可以做到这一点,或者有更好的方法

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

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

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

  • 重新使用模型。您的模型应该非常简单,可以从中选择数据,并且应该是圆滑的,但是如果您一遍又一遍地做同样的事情,它确实看起来很愚蠢。在这种情况下

  • 将控制器用作“主容器”并从所需的任何逻辑扩展它。因此,您基本上使用控制器作为模板,从模型中向下拉取数据,加载适当的视图

  • 我会用一个


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

    我认为许多站点都面临类似的挑战,包括我正在处理的一个站点,它将相同的db内容加载到站点中几乎每个页面的侧边栏中。我通过一个库和一个助手的组合实现了这一点:

  • 将数据逻辑放入库中(我的名为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;
    }
    
  • 创建用于加载库的辅助对象。(不要在视图中加载库!)我有一个加载库并返回数据的\u text\u助手:

  • function total_items()
    {
        $CI =& get_instance();
        return $CI->common->get_total_items();
    }
  • 从视图中调用helper函数。
    项目总数:

  • <p> Total items: <?php echo total_items(); ?> </p>
    就这么做吧 如果您使用名为controller1的控制器 像那样在视图中放置一个链接

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


    就这样

    是的,我知道,但我只是问问。。视图的许多实现都没有问题,但它更长。而库可能是答案:)你能提供你的站点代码示例/它的功能吗?有趣的方法是,它看起来非常文字化,而不是codeigniter-y。如果有许多不同的文件都包括该库并调用它;您可能做得不对,尤其是在创建侧边栏时。我不确定我是否理解“wordpress ish”和“codeigniter-y”,但我始终愿意接受更好的建议,在任何视图中包括我的sidebar.php存根,而不在所有控制器中复制代码。(另外,MVC框架中的“模板控制器”是什么?你的意思是创建一个MY_控制器包装而不是处理逻辑吗?)。谢谢你的指导。我只需要知道为什么我要同时加载库和助手。谢谢。