我目前正试图尽可能地将我的视图与控制器分开。理想情况下,除了变量名等,我希望视图中的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>

我发现答案最接近的是
Conditionals in Views
这是针对ASP的,我想这些原则仍然适用。我可以将条件语句带回到控制器中,但是控制器将创建html并将其发送到视图,这也不对。
有什么办法可以避免这种交叉吗?或者视图中总会有php的片段吗?

最佳答案

在我看来,呈现数据是视图的工作,所以如果需要适当的条件来显示数据,那么就一定要这样做,因为这样可以避免重复的html代码将其拆分为两个视图并在控制器中测试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>

07-24 18:43
查看更多