Codeigniter - 如果是其他内部视图

时间:2012-03-01 16:34:42

标签: php model-view-controller codeigniter

我正在为我的网络应用设计主题布局。

假设我有两个控制器,A和B.我想要一个视图来显示div A和​​B视图将显示div B.

我知道如何利用if($this->router->fetch_class() == 'A') { //display div A }

在控制器中设置它

但是,如何在视野中实现这一目标?

2 个答案:

答案 0 :(得分:3)

您可以在控制器中使用相同的逻辑,只需将值传递给您的视图:

$class = $this->router->fetch_class();

$this->load->view('myView', 
                  array('class' => $class));

然后在视图中使用该变量:

if ($class == 'A') ...

答案 1 :(得分:3)

NOOOO。不要这样做。 ;)这种事情的硬编码字符串几乎总是一种糟糕的方法。你的观点会变得混乱,并且好好重命名你的控制器类。

首先,如果此代码在您的控制器中,您不知道它是哪个控制器吗?

这让我假设这是一个由多个控制器使用的继承方法,对吧?在这种情况下,有几个选项:

  1. 以每个孩子为基础覆盖,告诉parent::some_action()方法要显示哪个div。 (在这里适当授权“权威”将为你节省一些脱钩的麻烦......)

  2. 而不是使用fetch_class()使用instanceof (这样,如果您重命名该类,您的IDE将为您完成繁重的任务)。

  3. 考虑将此内容拆分为子视图(即部分内容)。在视图中进行字符串比较会使真的混乱。信任。我

  4. 以下是我的建议:

    <?php
    // Overridden core class
    class MY_Controller extends CI_Controller {
    
        public function some_action()
        {
            //...
            if ($this instanceof Controller_class_that_uses_div_a)
            {
                $this->load->view('view_for_div_A');
            }
            else
            {
                $this->load->view('view_for_div_B');
            }
            //...
        }
    }