【发布时间】:2012-03-20 04:19:23
【问题描述】:
我正在为我的网络应用设计主题布局。
假设我有两个控制器,A 和 B。我希望 A 视图显示 div A 和 B 视图将显示 div B。
我知道如何使用if($this->router->fetch_class() == 'A')
{
//display div A
}在控制器内设置它
但是,如何实现这一点呢?
【问题讨论】:
标签: php model-view-controller codeigniter
我正在为我的网络应用设计主题布局。
假设我有两个控制器,A 和 B。我希望 A 视图显示 div A 和 B 视图将显示 div B。
我知道如何使用if($this->router->fetch_class() == 'A')
{
//display div A
}在控制器内设置它
但是,如何实现这一点呢?
【问题讨论】:
标签: php model-view-controller codeigniter
您可以在控制器中使用相同的逻辑,然后将值传递给您的视图:
$class = $this->router->fetch_class();
$this->load->view('myView',
array('class' => $class));
然后在您的视图中使用该变量:
if ($class == 'A') ...
【讨论】:
不。不要那样做。 ;) 对这类事情进行硬编码字符串几乎总是一种不好的方法。你的视图会变得混乱,祝你重命名你的控制器类好运。
首先,如果这段代码在你的控制器中,你不知道它是哪个控制器吗?
这让我假设这是一个被多个控制器使用的继承方法,对吧?在这种情况下,有几种选择:
在每个孩子的基础上覆盖它,告诉 parent::some_action() 方法您要显示哪个 div。 (此处适当的“权限”委派将在以后为您省去一些解耦的麻烦......)
不要使用fetch_class(),而是使用instanceof(这样,如果您重命名类,IDE 将为您完成繁重的工作)。
考虑将这些内容拆分为子视图(即部分视图)。 真的 在视图中进行字符串比较会很麻烦。相信。我。
以下是我的建议:
<?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');
}
//...
}
}
【讨论】: