ด้วยแนวคิดของ'ตัวควบคุมผอมแบบจำลองไขมัน'และการยอมรับทั่วไปที่ Views สามารถเรียกใช้โมเดลโดยตรงเมื่อต้องการข้อมูลเพื่อการส่งออกเราควรพิจารณาการจัดการส่วน 'รับและแสดง' ของคำขอภายใน Views ไม่ใช่ตัวควบคุม ตัวอย่างเช่น (พยายามเก็บรหัสที่ค่อนข้างทั่วไป):
ตัวควบคุม
<?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()
จะทำอย่างไร? การเพิ่มสิ่งนี้ลงในทุก ๆ วิธีในคอนโทรลเลอร์ (อย่างที่ฉันเคยทำมาก่อนหน้านี้โง่ ๆ ) ดูเหมือนจะเกินความจริงและยกเลิกการอบแห้งอย่างชัดเจน