Compte tenu du concept de `` contrôleurs maigres, de gros modèles '' et de l'acceptation générale que les vues peuvent appeler directement les modèles lors de la demande de données pour la sortie, devrait-on envisager de gérer les parties `` obtenir et afficher '' des demandes dans les vues et non le contrôleur? Par exemple (a tenté de garder le code assez générique):
Manette
<?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');
}
}
Vue
<?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>
Pour moi, cela a au moins un certain sens dans les cas où une demande est essentiellement juste une vue. Pourquoi le contrôleur devrait-il collecter et transmettre les données à la vue alors qu'il peut simplement les récupérer lui-même? Cela laisse le contrôleur ouvert pour un traitement purement «au niveau de l'application» (par exemple, la gestion des demandes GET / POST, la gestion des droits d'accès et des autorisations, etc.) ainsi que la conservation des modèles réutilisables et toutes les autres bonnes choses.
Si cet exemple était étendu pour permettre à un utilisateur de filtrer les résultats, le contrôleur manipulerait simplement le POST du formulaire et transmettrait les filtres à la vue, qui demanderait à nouveau les données, cette fois avec les filtres.
Est-ce une approche valable pour développer une application MVC? Ou est-ce que je néglige une partie importante du rôle qu'un contrôleur devrait jouer?
offers_model->get_latest()
être effectué? L'ajout de cela à chaque méthode du contrôleur (comme je l'ai déjà bêtement tenté) semble exagéré et nettement non SEC.