Dato il concetto di "controller skinny, modelli fat" e l'accettazione generale che Views può richiamare direttamente i modelli quando richiedono dati per l'output, si dovrebbe considerare la gestione delle parti "get e display" delle richieste all'interno di Views e non del controller? Ad esempio (tentato di mantenere il codice abbastanza generico):
controllore
<?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');
}
}
Visualizza
<?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>
Per me, questo ha almeno un certo senso nei casi in cui una richiesta è essenzialmente solo una vista. Perché il Titolare dovrebbe raccogliere e trasmettere i dati alla Vista quando può recuperarli da solo? Ciò lascia il Controller aperto per l'elaborazione a "livello di applicazione" (ad es. Gestione delle richieste GET / POST, gestione dei diritti di accesso e autorizzazioni, ecc.), Nonché della riutilizzabilità dei Modelli e di tutte le altre cose utili.
Se questo esempio fosse esteso per consentire a un utente di filtrare i risultati, il controller gestirà semplicemente il POST dal modulo e passerà i filtri alla vista, che quindi richiederebbe nuovamente i dati, questa volta con i filtri.
È un approccio valido allo sviluppo di un'applicazione MVC? O sto trascurando una parte importante del ruolo che un controller dovrebbe svolgere?
offers_model->get_latest()
essere effettuata la chiamata ? L'aggiunta di questo in ogni metodo nel controller (come ho tentato follemente in precedenza) sembra eccessivo e chiaramente non-DRY.