「細いコントローラー、ファットモデル」の概念と、出力用のデータが必要な場合にビューがモデルを直接呼び出すことができるという一般的な受け入れを考えると、コントローラーではなくビュー内のリクエストの「取得と表示」部分の処理を検討する必要がありますか?例(コードをかなり一般的なものにしようとする):
コントローラ
<?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>
私にとって、これは、要求が本質的に単なるビューである場合、少なくともある程度は理にかなっています。コントローラーがデータを取得できるのに、コントローラーがデータを収集してビューに渡す必要があるのはなぜですか?これにより、コントローラーは純粋に「アプリケーションレベル」の処理(たとえば、GET / POSTリクエストの処理、アクセス権とアクセス許可の管理など)のために開いたままになり、モデルの再利用可能性やその他すべての優れた機能を維持します。
この例を拡張してユーザーが結果をフィルターできるようにした場合、コントローラーはフォームからのPOSTを処理し、フィルターをビューに渡すだけで、今度はフィルターを使用してデータを再度要求します。
これはMVCアプリケーションを開発する有効な方法ですか?それとも、コントローラーが果たすべき役割の重要な部分を見落としているか?
offers_model->get_latest()
必要がありますか?これをコントローラーのすべてのメソッドに追加する(私が以前に愚かに試みたように)は、やり過ぎのようであり、明らかに乾燥していないようです。