什么应该在MVC视图中

时间:2012-12-18 17:14:53

标签: php codeigniter model-view-controller

对于codeigniter / php中的视图,下面是否考虑过多?其中$ springtrail是在模型中计算的数组?

<div id="page_name">Website</div>
<?php
$count = count($springtrail);
for($i = $count; $i >= 1; $i--){
    if ($i != 1)
    {
        ?> <div class="springtrail_button" id="st-0">arrayitem</div> <?php
    } else
    {
        ?> <a class="springtrail_link" href="#" id="1">Add</a> <?php
    }
}

3 个答案:

答案 0 :(得分:4)

不,它与您的外观逻辑有关,因此将它放在您的视图之外本质上会从您的视图中删除逻辑(并将其置于别处),打破您的mvc模型

答案 1 :(得分:1)

我认为没关系,只要你不延伸太多。

但是,最好将该逻辑保留在控制器中......因此你可以这样做:

控制器:

$count = count($springtrail);
for($i = $count; $i >= 1; $i--) {
    $data['s_count'] = ($i !== 1 ? 'button' : 'link');
}

查看:

<?php if($s_count == 'button'): ?>
   <html here>
<?php else: ?>
   <other html here>
<?php endif; ?>

答案 2 :(得分:0)

是的,我会说这太逻辑了。我想我可能会这样做:

<div id="page_name">Website</div>

<a class="springtrail_link" href="#" id="1">Add</a>

<?php foreach ($springtrail as $item): ?>
  <div class="springtrail_button" id="st-0">arrayitem</div>
<?php endforeach ?>

注意语法是如何不同的。我强烈建议您使用alternative PHP syntax

我认为,只要您发现自己在视图中分配变量值,就会表明您正走错了路。至于以不同方式显示列表中的第一个项目,那么,如果第一个项目与其他项目不同,那么我会说它不是该列表的成员,对吧?使其成为控制器中的单独值。看起来你甚至不会为第一个项目输出变量值,那么为什么不在开始输出列表之前静态显示它呢?

希望有所帮助。