从视图中调用模型函数是否合适?

时间:2014-07-23 09:11:46

标签: codeigniter

在处理codeigniter的过程中,我整理了一件可以从视图页面调用模型函数的东西。

例如

这是我的示例模型

<?php
class autoload_model extends CI_Model{
    function __construct() {
        parent::__construct();
   }

/*---------data fetching-----------*/
    function get_data_from_table($table,$data,$cond)
    {
        $this->db->select($data);
        $this->db->where($cond);
        $result= $this->db->get($table);
        return $result;
    }
   /*---------ends-----------*/
}
?>

现在在我的视图页面中我写了这个

<table cellspacing="1" cellpadding="0">
<tr>
<td>Product Title</td>
<td><Product Price</td>
</tr>


<?php
$product_list = $this->autoload_model->get_data_from_table("td_product","*",
                                                           "product_id > 0")->result_array();

if(count($product_list)>0)
    {
      foreach($product_list as $pl)
         {?>
      <tr>
         <td><?php echo $pl['product_title'];?></td>
         <td><?php echo $pl['product_price'];?></td>
      </tr>
        <?php
         }
     }
    else
     {?>
         <tr>
           <td colspan="2">No data Found</td>
         </tr>
    <?php
     }
}?>
</table>

整件事情都很好,只是我想知道它是否适合这种方式使用?

NOTE: 

autoload模型自动加载到config / autoload.php文件中

3 个答案:

答案 0 :(得分:0)

Codeigniter是基于MVC(模型 - 视图 - 控制器)设计模式构建的PHP框架。如果你不遵循这个,那就不要使用框架

答案 1 :(得分:0)

总之:


为什么吗

1)由于codeigniter是 MVC Framework ,我们应该遵循一些 defined protocols 的MVC。
2)我们要看看MVC框架是如何工作的,因此我们要使用它 3)CI如何运作? - 首先,我们有 URL 加载特定页面 - routes 检查与URL匹配的路由并调用特定的Controller - 如果在路线中找不到匹配项,则会检查匹配的 Controller Function
- 控制器使用插件数据调用 model ,模型将该数据用于<​​strong> database operations 。 - 然后模型将所需数据返回给Controller,然后Controller使用该数据加载 view


CI流程:

  

请求 ---&gt; 路由 ---&gt; 控制器 ---&gt; 模型/库/助手/插件< strong> ---&gt; 控制器 ---&gt; 视图


你的回答:

1)在视图中调用模型无论如何都会起作用(如果模型是自动加载的)但仍然是 wrong 。这样做意味着我们 breaking MVC rules 2)您还可以在上面的流程中看到模型和视图之间存在 no connection
3)那么我们可以在哪里调用模型:控制器,库,帮助器。

答案 2 :(得分:0)

另一种看待这种情况的方式 - 您正在调用视图来呈现产品表 - 但您尚未确认是否有产品。

控制器调用产品型号并请求产品。如果产品返回,则控制器会分配适当的视图以显示产品,并将products_list对象(或数组)传递给视图。在像

这样的视图中,表中间不应该有任何代码
if(count($product_list)>0)

视图应该具有的唯一php代码是

之类的东西
foreach($product_list as $pl)

显示产品。 $ product_list的值来自模型。因此,例如,如果您的数据库表名称更改 - 该更改在模型中完成 - 而不是视图。

如果没有产品从模型中返回 - 那么就没有$ product_list。控制器分配一个视图,用户可以在其中搜索/浏览其他产品。我们在视图中不需要if(count),因为我们已经知道搜索结果是什么。