Sollte man angesichts des Konzepts von "Skinny Controllern, Fat Models" und der allgemeinen Akzeptanz, dass Views Models direkt aufrufen können, wenn Daten für die Ausgabe benötigt werden, in Betracht ziehen, die "Get and Display" -Teile von Anforderungen in den Views und nicht den Controller zu behandeln? Zum Beispiel (versucht, den Code ziemlich allgemein zu halten):
Regler
<?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');
}
}
Aussicht
<?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>
Für mich ist dies zumindest in den Fällen sinnvoll, in denen eine Anfrage im Wesentlichen nur eine Ansicht ist. Warum sollte der Controller die Daten sammeln und an die Ansicht weitergeben müssen, wenn er sie nur selbst abrufen kann? Dadurch bleibt der Controller offen für die reine Verarbeitung auf Anwendungsebene (z. B. Bearbeitung von GET / POST-Anforderungen, Verwaltung von Zugriffsrechten und Berechtigungen usw.) sowie für die Wiederverwendbarkeit der Modelle und aller anderen guten Dinge.
Wenn dieses Beispiel erweitert wurde, damit ein Benutzer die Ergebnisse filtern kann, verarbeitet der Controller nur den POST aus dem Formular und übergibt die Filter an die Ansicht, die dann die Daten erneut anfordert, diesmal mit den Filtern.
Ist dies ein gültiger Ansatz für die Entwicklung einer MVC-Anwendung? Oder übersehe ich einen wichtigen Teil der Rolle, die ein Controller spielen sollte?
offers_model->get_latest()
erfolgen? Das Hinzufügen zu jeder Methode im Controller (wie ich es dummerweise zuvor versucht habe) scheint übertrieben und deutlich ungetrocknet zu sein.