在Codeigniter视图中有条件语句是否干净?

时间:2011-03-24 22:54:55

标签: php codeigniter coding-style

我目前正试图尽可能地将我的观点与我的控制器分开。理想情况下,我想在我的视图中使用最小的PHP,除了变量名等。这些变量是从控制器传入的。

但是在视图中包含IF语句(或类似内容)是否干净?

例如

// Controller 

$data['status'] = 'pass';

$this->load->view("Status Page", $data);

而且..

<!-- View -->
<div>
    <?php if($status === 'pass') { ?>
    <img src='passIcon.jpg'>Pass
    <?php } else { ?>
    <img src='failIcon.jpg'>Fail
    <?php } ?>
</div>

我在SO上找到答案的最接近的事情是 Conditionals in Views

这是针对ASP的,我猜这些原则仍然适用。我可以将条件语句带回控制器,但是然后控制器将创建HTML并将其发送到视图,这也不正确。

有没有办法避免这种交叉?或者视图中是否总会有PHP片段?

2 个答案:

答案 0 :(得分:11)

从我的角度来看,渲染数据是视图的工作,所以如果你需要条件来显示它,那么一定要做,因为它会避免重复的html代码将它分成2个视图并测试控制器中的var。

另外一个好的做法是在视图中使用替代语法,因为它使跟随gode更容易。例如:

<!-- View -->
<div>
    <?php if ( $status === 'pass' ) : ?>
        <img src='passIcon.jpg'>Pass
    <?php else : ?>
        <img src='failIcon.jpg'>Fail
    <?php endif; ?>
</div>

然而,再举几个例子你可以在控制器中设置src(我必须承认有时你需要在视图中使用条件):

控制器     

$data['src'] = ( $data['status'] === 'pass' ) ? 'passIcon.jpg' : 'failIcon.jpg';
$data['text'] = ( $data['status'] === 'pass' ) ? 'Pass text' : 'Fail text';

$this->load->view("Status Page", $data);

查看

<!-- View -->
<div>
    <img src='<?php echo $src; ?>'><?php echo $text; ?>
</div>

答案 1 :(得分:1)

不同的框架有不同的接受做法;例如,在Django中,将任何逻辑都放在模板文件中是不赞成的。

我总是喜欢保持控制器相对无杂乱 - 特别是如果它像在两个图像之间进行选择一样简单。

最终,这是你的选择,但对我来说,简单的条件和循环在模板中很好。