考虑到“瘦控制器,胖模型”的概念以及视图在需要输出数据时视图可以直接调用模型的普遍接受性,是否应该考虑处理视图中请求的“获取和显示”部分而不是控制器?例如(试图使代码相当通用):
控制者
<?php
class Invoice extends Base_Controller {
/**
* Get all the invoices for this month
*/
public function current_month() {
// as there's no user input let's keep the controller very skinny,
// DON'T get data from the Model here, just load the view
$this->load->view('invoice/current_month');
}
}
视图
<?php
// directly retrieve current month invoices here
$invoices = $this->invoice_model->get_current_month();
// get some other display-only data, e.g. a list of users for a separate list somewhere on the page
$users = $this->user_model->get_users();
?>
<h1>This month's invoices</h1>
<ul>
<?php foreach ($invoices as $invoice) { ?>
<li><?php echo $invoice['ref']; ?></li>
<?php } ?>
</ul>
对我来说,这在请求本质上只是一个View的情况下至少有意义。当Controller本身只能检索数据时,为什么还要收集数据并将其传递给View?这使Controller保持打开状态,可以进行纯粹的“应用程序级”处理(例如,处理GET / POST请求,管理访问权限),以及保持模型可重用和所有其他优点。
如果扩展此示例以允许用户过滤结果,则控制器将只处理表单中的POST并将过滤器传递给View,然后该视图将再次请求数据,这次是使用过滤器。
这是开发MVC应用程序的有效方法吗?还是我忽略了控制器应扮演的重要角色?
offers_model->get_latest()
?将此添加到控制器中的每个方法中(就像我之前愚蠢地尝试的那样)似乎过大并且明显不干燥。