在mvc(codeigniter)中是否可以在视图中显示以下类型的代码?

时间:2016-03-30 11:35:10

标签: php codeigniter

我是 MVC& codeigniter 并想知道在查看文件

中是否可以使用以下类型的代码
if(strcasecmp($_SESSION['role'],'author')==0)
{
   some code
}

 if($this->session->flashdata('edition_done_by'))
 {
    some code
 }

即。 检查视图文件中是否存在会话对象或flashdata

另外,我想知道使用 foreach 循环结构(如下面给出的)在视图文件中动态创建表行是否正常 MVC

<?php foreach($items as $item){ ?>

  <tr>
     <td><?php echo $item->name; ?> </td>
     <td><?php echo $item->price; ?> </td>
  </tr> 
<?php  } ?>

3 个答案:

答案 0 :(得分:2)

检查视图中的会话值不是一个好习惯。在控制器中检查并传递相关数据以查看

答案 1 :(得分:1)

这完全违背了Model-View-Controller原则的想法。

在(真的)短;该模型负责管理数据实体,CRUD操作,数据实体应如何显示等。控制器负责任何business logic。意思是;我应该何时更新记录,该数据是否可供用户x等使用。该视图仅负责显示已有的数据。没什么,没什么。

所以在你的例子中; Controller应检查会话数据,闪存数据等,并将处理后的数据发送到视图。例如:

if( strcasecmp($_SESSION['role'],'author') === 0 )
{
    $can_edit = true;
    $message = 'You can edit! Go ahead';
} else {
    $can_edit = false;
    $message = 'You do not have sufficient rights to edit this entity';
}

现在将这些变量传递给视图,您可以执行以下操作:

<?php if ( $can_edit ): ?>
    <form action="POST">
        <p><?php echo $message; ?></p>
        <textarea name="content"><?php echo $entity->content; ?></textarea>
        <button type="submit">Update</button>
    </form>
<?php else: ?>
    <p><?php echo $message; ?>
<?php endif; ?>

答案 2 :(得分:0)

一句话答案是肯定的!没问题

可以在视图中访问会话变量。会话是可变的,用于存储信息。

只要您没有将业务逻辑放在您的视图中。你可以在视图中使用任何东西。你提到的你正在使用的案例是我将要称之为&#34;显示逻辑&#34;用于检查哪些/什么/来自何处/如何显示内容。

您显示以下两个代码示例正确使用MVC

 if($this->session->flashdata('edition_done_by'))
 {
    some code
 }

You For Loop Code对MVC也没有问题