我是 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 } ?>
答案 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也没有问题