在处理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文件中
答案 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),因为我们已经知道搜索结果是什么。