Враховуючи концепцію "худих контролерів, жирових моделей" та загального визнання того, що 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()
? Додавання цього до кожного методу в контролері (як я нерозумно намагався раніше) здається непосильним і явно не СУХИМ.