Dado el concepto de 'controladores flacos, modelos gordos' y la aceptación general de que las Vistas pueden llamar directamente a los Modelos cuando requieren datos para la salida, ¿debería uno considerar manejar las partes de 'obtener y mostrar' de las solicitudes dentro de las Vistas y no el Controlador? Por ejemplo (intentó mantener el código bastante genérico):
Controlador
<?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');
}
}
Ver
<?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>
Para mí, esto tiene al menos algún sentido en los casos en que una solicitud es esencialmente solo una Vista. ¿Por qué el controlador debe recopilar y transmitir los datos a la vista cuando solo puede recuperarlos? Esto deja al Controlador abierto para el procesamiento puramente de 'Nivel de aplicación' (por ejemplo, manejo de solicitudes GET / POST, administración de derechos de acceso y permisos, etc.), así como para mantener los Modelos reutilizables y todas las demás cosas buenas.
Si este ejemplo se extendiera para permitir que un usuario filtre los resultados, el Controlador solo manejaría la POST desde el formulario y pasaría los filtros a la Vista, que luego solicitaría nuevamente los datos, esta vez con los filtros.
¿Es este un enfoque válido para desarrollar una aplicación MVC? ¿O estoy pasando por alto una parte importante del papel que debe desempeñar un controlador?
offers_model->get_latest()
? Agregar esto en cada método en el controlador (como he intentado tontamente antes) parece excesivo y claramente SECO.