用户
 找回密码
 入住 CI 中国社区
搜索
查看: 2370|回复: 3
收起左侧

视图中可以调用模型可以吗?请看示例。读取数据的例子。

[复制链接]
发表于 2012-10-14 20:04:16 | 显示全部楼层 |阅读模式
本帖最后由 lawzk 于 2012-10-14 20:12 编辑

我上次看的一个视频教程,他用的就是视图中调用模型。我现在用的这个示例中,觉得在视图中调用模型比在控制器中调用要方便。但是这样好像又不符合MVC思想。

我这例子如下:

就是控制器读取数据库信息显示。但是我又要判断,如果数据库没有信息时,视图中应该显示“暂无记录”,如果有数据,就显示数据。

我现在用的是:

控制器:
PHP复制代码
 
        public function account()
        {
                $data['accountlist']='';
                $obj=$this->manager_model->get_account();
                if($obj->num_rows>0)
                {
                        $data['accountlist']=$obj->result();
                }
                $this->load->view('public/account',$data);
        }
 
复制代码

视图中用的是:
PHP复制代码
 
<?php if(is_array($accountlist)):?>
<?php foreach ($accountlist as $row):?>
          <tr>
            <td><?php echo $row->id;?></td>
            <td><?php echo $row->name;?></td>
            <td><?php echo $row->ip;?></td>
            <td><?php echo $row->time;?></td>
          </tr>
<?php endforeach;?>
<?php else:?>
<tr align=center><td colspan=5>暂无管理员</td></tr>
<?php endif;?>
 
复制代码


我是通过 if(is_array($accountlist))来判断有没有数据的。感觉很别扭。如果我直接在数据调用模型。就可以直接使用$obj->num_rows来做为判断了。这个和以前的比较一致。
PHP复制代码
 
<?php
$obj=$this->manager_model->get_account();
?>
<?php if($obj->num_rows>0):?>
<?php foreach ($obj->result() as $row):?>
          <tr>
            <td><?php echo $row->id;?></td>
            <td><?php echo $row->name;?></td>
            <td><?php echo $row->ip;?></td>
            <td><?php echo $row->time;?></td>
          </tr>
<?php endforeach;?>
<?else:?><tr align=center><td colspan=5>暂无管理员</td></tr>
<?php endif;?>
 
复制代码


请问我该使用哪个方法呢。我个人觉得在视图中调用模型比较好。但是如果不符合MVC思想,或者这样有弊端,我还是克服这个习惯吧。
 楼主| 发表于 2012-10-14 20:10:44 | 显示全部楼层
我刚才做了个变通,就是在控制器中不传具体的值,而是传整个对象

控制器
PHP复制代码
 
        public function account()
        {
                $data['result']='';
                $obj=$this->manager_model->get_account();
                $data['result']=$obj;
                $this->load->view('public/account',$data);
        }
 
复制代码

视图:

PHP复制代码
 
<?php
if($result->num_rows()>0):
foreach ($result->result() as $row):?>
          <tr>
            <td><?php echo $row->id;?></td>
            <td><?php echo $row->name;?></td>
            <td><?php echo $row->ip;?></td>
            <td><?php echo $row->time;?></td>
          </tr>
<?php endforeach;?>
<?php else:?>
<tr align=center><td colspan=5>暂无管理员</td></tr>
<?php endif;?>
 
复制代码


大家看看,这个方案如何?大家一般都用什么方案来处理类似事情呢?能否指点一下。
发表于 2012-10-15 09:34:58 | 显示全部楼层
用第一种方案
 楼主| 发表于 2012-10-16 19:22:23 | 显示全部楼层
我回复的“我刚才做了个变通,就是在控制器中不传具体的值,而是传整个对象”这一段。这个方法如何?还是要用我第一贴中的方法。感谢回复。

本版积分规则