在我看来,使用条件块会破坏 MVC 架构的目的吗?
我有一个加载视图的控制器方法,并且我希望根据作为参数传递给该方法的页面 id 有一个不同的按钮组。
一切正常,但在我看来,我有几个:
<?php if($pageID == n) : ?>
html content...
<?php endif; ?>
这是一个坏习惯吗?如果是,有什么更好的解决方案?在我看来调用库方法似乎也是错误的。
在我看来,使用条件块会破坏 MVC 架构的目的吗?
我有一个加载视图的控制器方法,并且我希望根据作为参数传递给该方法的页面 id 有一个不同的按钮组。
一切正常,但在我看来,我有几个:
<?php if($pageID == n) : ?>
html content...
<?php endif; ?>
这是一个坏习惯吗?如果是,有什么更好的解决方案?在我看来调用库方法似乎也是错误的。
有几种方法可以避免该解决方案,但这实际上取决于问题的规模。
更好的解决方案可能类似于以下内容。
看法
<?php echo $conditional_html; ?>
控制器
switch($pageID)
{
case 1:
$data['conditional_html'] = $this->load->view('the_first_id_html', TRUE);
break;
case 4:
case 7:
case 8:
$data['conditional_html'] = $this->load->view('some_special_html', TRUE);
break;
case 13:
case 18:
$data['conditional_html'] = $this->load->view('the_secret_menu_html', TRUE);
break;
default:
$data['conditional_html'] = $this->load->view('the_default_html', TRUE);
}
$this->load->vars($data);
如果您不介意在视图中加载视图,另一种更简单的方法可能是这样的:
看法
<?php $this->load->view($conditional_html); ?>
控制器
switch($pageID)
{
case 1:
$data['conditional_html'] = 'the_first_id_html';
break;
case 4:
case 7:
case 8:
$data['conditional_html'] = 'some_special_html';
break;
case 13:
case 18:
$data['conditional_html'] = 'the_secret_menu_html';
break;
default:
$data['conditional_html'] = 'the_default_html':
}
$this->load->vars($data);
最后,您可以通过许多不同的方式来做到这一点,但我希望这可以为一些替代方法提供一些启示。
不,不是。视图应该包含 MVC 设计模式中的表示逻辑。
问题是,在 CodeIgniter 中,您没有真正的视图,只有模板。这与一个事实有关,CodeIgniter 的最初目的是模仿 RubyOnRails,而不是实现 MVC。
如果有人强迫我使用 CodeIgniter,我会在“视图”中使用类似这样的东西:
<?php
$pagelist = array(
1 => 'foo/b',
2 => 'foo/a',
3 => 'foo/r',
4 => 'lorem/ipsum'
);
$pageID = isset( $pagelist[ $pageId ]) ? $pageID : 1;
?>
<!DOCTYPE html>
<html>
<!-- some stuff here -->
<?php include '/path/to/views/' . $pagelist[ $pageId ]; ?>
<!-- a bit more HTML -->
</html>
$this->load->view()
in(CI 称之为)控制器基本上只是一个美化的include
/ require
。这种方法没有什么神奇之处。
此外,您可能会觉得这很有趣:http ://codeigniter.com/forums/viewthread/62366/